java - 如何在数组中找到两个重复元素

标签 java arrays

下面的代码工作正常,但复杂度为 O(n^2)。是否可以在 O(n) 或 O(log n) 时间内完成。

public class TwoRepeatingElements {
    public static void main(String[] args) {
        Integer array[] = {4, 2, 4, 5, 2, 3, 1, 2};
        findTwoRepeatingElements(array);


    }

    private static void findTwoRepeatingElements(Integer[] array) {
        int i, j;
        for(i = 0; i < array.length-1; i++) {
            for(j = i+1; j < array.length-1; j++) {
                if(array[i] == array[j]) {
                    System.out.println(array[i]);
                }
            }
        }

    }

}

最佳答案

显然你不能在小于 O(n) 的时间内找到它,因为你需要扫描整个数组。 您可以将 hastable 用于 O(n) 解决方案。

只需将您的元素插入到一个 hastable 中,当您要插入的元素已经存在时停止。

private static void findTwoRepeatingElements(Integer[] array) {
    Set<Integer> set = new HashSet<Integer>();
    for(int a : array) {
        if(!set.add(a)) {
            System.out.println(a);
            break;
        }
    }
}

关于java - 如何在数组中找到两个重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8373497/

相关文章:

java - 获取索引时需要 EqualIgnoreCase

java - 在目录中构建文件数组

Java程序长数组中的数字格式异常?

java - 如何将 HashMap<String, ArrayList<String>> 转换为 HashMap<String, String[]>?

java - 尽管没有在任何地方清除,但构造函数中的 ArrayList 分配的数据正在丢失其数据

java - 随着时间的推移,类定义从 jvm 中消失(NoClassDefFound)

c++ - Delete[] 没有调用元素析构函数

php - 返回数组中最大值的索引

javascript - Spring Boot 和 PreFlight 请求

c++ - 复制构造函数 Big 3 C++ 问题