数组|使用数组除法查找重复整数?

时间:2019-04-02 11:31:02

标签: java arrays methods

如何使方法显示重复的数字。似乎是一个逻辑错误正在阻止我,而且我不知道为什么代码不执行应做的事情。

  public static void findRepeating(int[] arr) { 
        for (int i = 0; i< arr.length; i++) {
             for(int d = 0; d<arr.length; d++) {
                 if(arr[i] / arr[d] == 1) {
                     System.out.println(arr[i] + " is repeating");
                 }
             }
        }
    }


    public static void main(String[] args) {

        int[] myArray = {69, 7, 8, 9, 90, 666, 69, 420, 2};


        findRepeating(myArray);

    }

}

4 个答案:

答案 0 :(得分:3)

这是内部for循环中的逻辑和比较的更正

  public static void findRepeating(int[] arr) { 
    for (int i = 0; i< arr.length; i++) {
         for(int d = i+1; d<arr.length; d++) { //check with next element, as u will iterate over same element if iterating from start
             if(arr[i] == arr[d]) { // checking for same number, as division can give 1 in multiple case for ex 11/7 is also 1
                 System.out.println(arr[i] + " is repeating");
             }
         }
    }
}

答案 1 :(得分:2)

问题与您的if条件逻辑有关。

if (i != d && arr[i] / arr[d] == 1 && arr[i] % arr[d] == 0)

1)您应检查是否没有被同一数组元素除。您可以改为从d而不是i+1初始化0的值。

2)除以等于1

3)模数应为0,因为除法逻辑对此逻辑还不够。 正如@Eran所说,9/89/9也会得到1,但需要进行模数检查,因此我们可以确保打印出只有9正在重复

public static void findRepeating(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
        for (int d = 0; d < arr.length; d++) {
            if (i != d && arr[i] / arr[d] == 1 && arr[i] % arr[d] == 0) {
                System.out.println(arr[i] + " is repeating");
            }
        }
    }
}

public static void main(String[] args) {
    int[] myArray = { 69, 7, 8, 9, 90, 666, 69, 420, 2 };
    findRepeating(myArray);
}

答案 2 :(得分:2)

问题已经通过您的方法得到了强调,但是当您的数组大小太大(O(n ^ 2)的时间复杂度)时,不建议一次又一次地遍历元素,而应考虑在遍历数组时进行此遍历在O(n)时间中具有O(n)的额外空间

Set<Integer> hs = new HashSet<Integer>(); // to store elements
for (int i = 0; i< arr.length; i++) {
            if(hs.contains(arr[i])) { // Checking if element is present in set or not
                System.out.println(arr[i] + " is repeating");
            }else {
                hs.add(arr[i]);
         }
     }
}

答案 3 :(得分:1)

您需要从第二个循环条件中排除当前的i索引。对于较大的优化,您可以从索引i开始迭代第二个循环。

public static void findRepeating(int[] arr) {
        if(arr.length<2) { return; } // edge case condition
        for (int i = 0; i< arr.length; i++) {
            for(int d = i+1; d<arr.length; d++) { // start from i+1 index
                if( arr[i] == arr[d]) {
                    System.out.println(arr[i] + " is repeating");
                }
            }
        }
    }

现在它将打印:

  

69正在重复

否则,您将始终重复打印arr[i]