【问题标题】:How to check for duplicates in an entire 2d array? [duplicate]如何检查整个二维数组中的重复项? [复制]
【发布时间】:2017-11-13 05:20:09
【问题描述】:

我是一个刚学习数组的初学者。我最近学习了二维数组,我试图找出二维数组中是否有重复项。我知道如何检查同一列或同一行中是否有重复项,但我无法弄清楚如何比较一个数字,如果它与我尝试比较的数字不在同一列或同一行中。这是我现在的代码:

public static boolean correctNumbers(int[][] values) {
    for (int i = 0; i < values.length; i++) {
        for (int j = 0; j < values[i].length; j++) {
            int num = values[i][j];
            for (int k = j + 1; k < values.length; k++) {
                if (num == values[i][k] || num > values.length * values.length || num < 1) {
                    return false;
                }
            }
            for (int l = i + 1; l < values.length; l++) {
                if (num == values[l][j] || num > values.length * values.length || num < 1) {
                    return false;
                }
            }
        }
    }

    return true;
}

我需要创建一个方法,我不能使用任何其他方法来创建它。 感谢您的帮助!

编辑:如果数组中有重复项、数组中的数字小于 1 或大于数组中元素的总数,则返回 false。换句话说,此方法正在检查数组是否包含数组中 1 到 (i*j) 的所有值。我意识到我在解释那部分方面做得不好。再次感谢!

【问题讨论】:

  • @KaustubhKhare 确实是 dup,但那里和从那里链接的 dup 都没有好的答案
  • 是的,但是在链接的问题中,我真的不知道最佳答案中发生了什么。
  • 根据您的编辑,二维数组似乎应该包含所有值 1...n^2 而没有重复(每个数字应该只出现一次)。现在这是一个不同的问题,您可以使用另一个数组作为附件吗?

标签: java arrays duplicates


【解决方案1】:

您可以通过将数字保存到哈希集中来简化逻辑,并在迭代它们时检查每个数字是否已经存在(意味着重复),否则添加它:

public static boolean correctNumbers(int[][] values) {
    Set<Integer> set = new HashSet<>();
    for (int i = 0; i < values.length; i++) {
        for (int j = 0; j < values[i].length; j++) {
            int num = values[i][j];
            if (set.contains(num)) {
                return false;
            }
            set.add(num);
        }
    }
    return true;
}

编辑

我们可以使用一个数组来实现上面代码中哈希集所做的相同功能:

public static boolean correctNumbers(int[][] values) {
    int n = values.length;
    int[] dict = new int[n * n + 1];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < values[i].length; j++) {
            int num = values[i][j];
            if (num < 1 || num > n || dict[num] != 0) {
                return false;
            }
            dict[num] = 1;
        }
    }
    return true;
}

【讨论】:

  • 感谢您的回答,但是您知道不使用哈希集的任何方法吗?
  • @WizKid22 有什么理由使用哈希集?
  • 因为它是针对我所拥有的课程的。本周晚些时候我们将进行一次测试,教授为我们提供了示例问题作为学习指南。我正在研究它们并被困在这个问题上,在这门课上我们还没有学会如何使用哈希集,所以我不确定它是否可以在测试中使用。
  • @WizKid22 你能用一个额外的数组吗?
  • 是的,我可以使用额外的数组
猜你喜欢
  • 2020-09-15
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 2016-09-12
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 2010-12-18
相关资源
最近更新 更多