代码之家  ›  专栏  ›  技术社区  ›  Mark F

方法效率低下

  •  -1
  • Mark F  · 技术社区  · 7 年前

    这是来自代码战。这种方法是可行的,但对于大输入来说显然花费了太长时间。有人能解释一下这个解决方案的低效之处吗?

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

    例子

    对于a=[1,2,3,1],输出应为 包含重复项(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 回复  |  直到 7 年前
        1
  •  0
  •   Denis Jr    7 年前

    我认为@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);
        }
    
    }
    

    它将打印:

    包含重复项?真

        2
  •  2
  •   Prashant    7 年前

    一种方法是将数组存储在 Set 然后比较数组和集合的长度。方法如下:

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