【发布时间】:2019-04-29 06:18:27
【问题描述】:
我不能修改数组的内容,比如使用 Array.sort()。
这段代码的预期返回是 6,因为值 1 重复了三个,值 2 重复了一个,值 4 重复了两个。但我的显示为 10。我知道它是 10 的原因:它会多次计算重复项。
如何让这段代码只检查一次重复的整数?
private int count = 0;
public void run() {
int[] a = {1, 4, 2, 4, 7, 1, 1, 9, 2, 3, 4, 1};
println(countDuplicates(a));
}
private int countDuplicates(int[] a) {
for (int i = 0; i < a.length; i++) {
for (int j = i + 1; j < a.length; j++) {
if (a[i] == a[j]) {
count++;
}
}
}
return count;
}
【问题讨论】:
-
提示:使用
Map<Integer, Integer>从元素到元素的频率,并且只遍历你的数组一次,这个任务可以变得更容易。 -
你也可以使用 set 实现,在 set 中添加 sth 时,你可以检查是否得到 true 或 false 并增加重复的计数器。
-
我认为 (i) 应该达到 length-1
-
@K. Fred 遍历 for(int j = 0; j
-
只计算到后面的第一个重复,然后突破j