因为你可以看到我试图删除该元素,如果它重复超过n次。
例如: {1,2,4,5,6,5}并且每个元素都可以重复一次然后我应该返回{1,2,4,5,6}
这是我到目前为止所提出的:
public static int[] deleteNth(int[] elements, int maxOcurrences) {
int times[] = new int[elements.length];
for(int i =0;i<elements.length;i++){
for(int j =0;i<elements.length;j++){
if(elements[i]==elements[j]){
times[i]++;
if(times[i]>maxOcurrences){
System.arraycopy(elements, j+1 , elements, j, elements.length - 1 - j);
}
}
}
}
return elements;
}
这是对的吗?如果不是我怎么能纠正它 (对我来说很容易,因为我仍然是新手),谢谢
答案 0 :(得分:1)
您可以使用HashMap将元素存储在键值对中,其中键将是您的数字,值将是它发生的次数。例如,在给定的输入数组中,HashMap将如下所示
1->1
2->1
4->1
5->2
6->1
然后你可以使用contains方法并检查密钥的值,如果key的值大于1,则删除它。
答案 1 :(得分:0)
如果你使用的是java 8(或更高版本),你可以利用收藏家:
一些代码(导入省略):
public class Main {
public static void main(String[] args) {
System.out.println(filterByRepeatedTimes(groupByRepeatedTimes(Arrays.asList(1, 2, 4, 5, 6, 5)), 2));
}
private static Map<Integer, Long> groupByRepeatedTimes(final List<Integer> arr) {
return arr.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
}
private static List<Integer> filterByRepeatedTimes(final Map<Integer, Long> repetitionsMap, final int nTimes) {
return repetitionsMap.keySet()
.stream()
.filter(k -> repetitionsMap.get(k) < nTimes)
.collect(Collectors.toList());
}
}
或者,如果您只想删除重复项:
System.out.println(Stream.of(1, 2, 4, 5, 6, 5).distinct().collect(Collectors.toList()));
希望有所帮助。