有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何检查数组中所有整数的不相等性?

我试图找出如何检查我数组中的23个数字(这些数字是随机生成的)是否彼此不相等,但如果没有一个超级荒谬的if语句,我就无法找出如何做到这一点。我还有别的办法吗?另一种选择是检查数组中的任意两个数字是否相等,但我提出这个问题的原因是因为我认为检查每对数字的相等性比检查所有数字的不相等性要困难


共 (3) 个答案

  1. # 1 楼答案

    您的问题可以通过两个嵌套for循环来解决

    public static boolean hasDuplicates(int[] array)
    {
        for (int i = 0, length = array.length; i < length; i++)
        {
            int val = array[i];
            for (int j = 0; j < i; j++)
            {
                if (array[j] == val)
                {
                    return true;
                }
            }
        }
    
        return false;
    }
    

    第一个循环在数组中的每个元素上循环,而第二个循环检查外循环索引之前的任何值是否等于array[i]处的值。您可以安全地使用j < i来提高性能,并确保它不会在同一个元素上返回true

  2. # 2 楼答案

    如果数字的上限相对较低(比如小于100万),并且不关心内存使用情况,那么可以创建一个布尔数组,如果数组中的每个元素都有索引,则将其设置为true。这是O(n),所以这可能是你能做的最好的了,但是,不可否认,你必须满足上述标准

    public boolean allDifferent(int[] numbers)
    {
        //everything in the array defaults to false
        boolean[] array = new boolean[upperBound+1];
    
        for (int i = 0; i < numbers.length; i++)
        {
            if (array[numbers[i]])   //if we've already seen this number (aka duplicate)
            {
                return false;
            }
    
            array[numbers[i]] = true;   //note that we have now seen this number
        }
    
        return true;
    }
    
  3. # 3 楼答案

    可以使用如下算法来测试每个数组元素是否唯一:

    boolean everyNumberIsUnique(int[] numbers) {
      for(int i = 0; i < numbers.length; i++) {
        for(int j = i + 1; j < numbers.length; j++) {
          if(numbers[i] == numbers[j]) return false;
        }
      }
      return true;
    }
    

    它只是将每个数字相互比较,如果任意两个数字相等,则返回false