如何计算这些重复的整数?

时间:2018-11-27 13:29:34

标签: java arrays

我不能像使用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;
}

4 个答案:

答案 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
}