方法效率低下

时间:2018-05-29 16:44:39

标签: java big-o

这是来自代码争斗。该方法有效,但对于大输入显然需要太长时间。有人可以解释这个解决方案的低效率吗?

问题: 给定一个整数数组,编写一个函数来确定数组是否包含任何重复项。如果任何元素在数组中出现至少两次,则您的函数应该返回true,如果每个元素都是不同的,它应该返回false。

实施例

对于a = [1,2,3,1],输出应为 containsDuplicates(a)= true。

给定数组中有两个1。

解决方案:

    static boolean containsDuplicates(int[] a) {
    boolean elementRepeat = false;
    for (int loop1 = 0; loop1 < a.length; loop1++){
        for (int loop2 = 0; loop2 < a.length; loop2++){
            if (a[loop1] == a[loop2] && loop1!=loop2){                   
                elementRepeat = true;
                return elementRepeat;
            }
        }
    }

    return elementRepeat;
}

2 个答案:

答案 0 :(得分:2)

执行此操作的一种方法是将数组存储在Set中,然后比较数组和集合的长度。方法如下:

 static boolean containsDuplicates(int[] array) {
    HashSet<Integer> integers = new HashSet<>();
    Arrays.stream(array).forEach(integers::add);
    array.length == integers.size();
 }

答案 1 :(得分:0)

我认为@Henry有一个非常好的消化。

这是一个例子:

import java.util.HashSet;
import java.util.Set;

public class Test4 {

    public static void main(String[] args) {
        Integer[] arrayInt = {1, 2, 3, 1};

        Set<Integer> integers = new HashSet<Integer>();
        boolean hasDuplicates = false;

        for (Integer integerNumber : arrayInt) {
            if (!integers.add(integerNumber)) {
                hasDuplicates = true;
                break;
            }
        }

        System.out.println("Contains duplicates? " + hasDuplicates);
    }

}

它会打印出来:

  

包含重复项?真