我不能像使用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;
}
答案 0 :(得分:3)
一种选择是将当前大小减去已删除重复项的大小:
Set<Integer> set = new HashSet<>();
for (int i=0; i < a.length; ++i) {
set.add(a[i]);
}
int numDuplicates = a.length - set.size();
使用Java 8中的流,从原始Integer
数组中填充一组int
可能是一种流畅的方法。
答案 1 :(得分:1)
在这里,您可以轻松理解精益者的逻辑
public static void main(String[] args) throws IOException {
int []a ={1, 4, 2, 4, 7, 1, 1, 9, 2, 3, 4, 1};
Map<Integer, Integer> occurances = new HashMap<>();
for(int i = 0; i < a.length; i++) {
//Check the is already occurred if not then add occurrence as 1
if (!occurances.containsKey(a[i])) {
occurances.put(a[i], 1);
}
// Second occurrences for a number
else {
occurances.put(a[i], occurances.get(a[i]) + 1);
}
}
System.out.println(occurances);
System.out.println("Total Numbers: "+a.length);
System.out.println("Duplicate count is "+ (a.length - occurances.size()));
}
答案 2 :(得分:0)
就地对数组进行排序。
对数组运行一次,并计算当前值等于先前值的次数。
(假设您可以使用库方法对数组进行排序)
答案 3 :(得分:0)
private static int countDuplicates(final int[] a)
{
int count = 0;
Arrays.sort(a); // sort array, you can use any way for it
for (int i = 0; i < a.length - 1; i++)
{
if (a[i] == a[i + 1]) // check only next element
{
count++;
}
}
return count; // return 6
}