检查int[]Java中的重复数字

检查int[]Java中的重复数字,java,sorting,Java,Sorting,我想知道int[]中的任何数字是否出现3次或更多次?我该怎么做 有这样的方法真是太棒了 boolean hasTriples(int[] numbers) { //some code } 创建一个映射,并让整数n映射到n的出现次数 循环遍历数组以填充映射,然后循环遍历映射中的键以检查哪些键映射到大于等于3的值 以下是一些让您开始学习的代码: int[] arr = { 1, 3, 2, 3, 3, 4, 2, 2 }; Map<Integer, Integer> counts

我想知道int[]中的任何数字是否出现3次或更多次?我该怎么做


有这样的方法真是太棒了

boolean hasTriples(int[] numbers) {

//some code

}
创建一个映射,并让整数n映射到n的出现次数

循环遍历数组以填充映射,然后循环遍历映射中的键以检查哪些键映射到大于等于3的值

以下是一些让您开始学习的代码:

int[] arr = { 1, 3, 2, 3, 3, 4, 2, 2 };
Map<Integer, Integer> counts = new HashMap<Integer, Integer>();

// Count occurrencies
for (int i : arr) {
    if (!counts.containsKey(i))
        counts.put(i, 0);
    counts.put(i, 1 + counts.get(i));
}

// Print how many times each number occurs in arr.
for (int i : counts.keySet())
    System.out.printf("i: %d, count: %d%n", i, counts.get(i));
下面是发生的事情:

传入整数数组。 设置数组值到值计数的映射。 你在阵列中行走。对于数组中的每个整数:

a。检索该数组值的当前计数

b。如果不存在值,则从值1开始

c。如果给定值的映射中确实存在一个值,请向其添加一个值

d。如果从map+1检索到的值超过了3的限制,那么您已经证明数组中有一个值至少重复了三次

如果在循环结束时没有返回true,则返回false,因为没有值重复3次


下面是一种不使用任何额外类(如Map类)的方法。它可能会慢一些,但希望更容易理解

public boolean hasTriples(int[] list) {
    for (int i = 0; i < list.length; i++){
        int duplicates = 0;

        for (int j = i+1; j < list.length; j++){
            if (list[i] == list[j]) {
                duplicates++;
                if (duplicates >= 3) return true;
            }
        }
    }
    return false;
}
下面是这段代码的作用。外部for循环在列表中运行,以确保检查每个值是否存在重复项。内部循环在列表的内存中运行,以检查有多少重复值。如果找到三个或更多重复项,函数将返回true,而不处理列表的其余部分。如果外部for循环在没有返回true-false的方法的情况下完成,则返回true-false,因为不能有任何三个重复


希望这有帮助

这看起来正是我想要的,不过稍微了解一下代码是如何工作的会很好,它背后的想法。使用foreach循环怎么样?@Seth-simple。此解决方案和@aioobe都构建了一个临时映射,用于计算每个整数在输入数组中出现的次数。@Bohemian-可能,但更改可能纯粹是表面的。我同意你的看法,其他的美容方法也是可能的。foreach会更好。当我看到上面aloobe的回答时,有点脸红=如果有这样一个方法,那将是一个令人震惊的库膨胀案例,IMO.lol我同意,尽管我的意思是我想要答案的格式。
public boolean hasTriples(int[] list) {
    for (int i = 0; i < list.length; i++){
        int duplicates = 0;

        for (int j = i+1; j < list.length; j++){
            if (list[i] == list[j]) {
                duplicates++;
                if (duplicates >= 3) return true;
            }
        }
    }
    return false;
}