当前位置: 首页 > 知识库问答 >
问题:

检查数组中0-array.length-1之间的数字

袁凌
2023-03-14

我需要编写一个程序来检查数组中的所有数字是否介于0到数组之间。长度为1,将只出现一次,返回true或false。

例如,[0,1,3,2]将返回True,而[4,3.0,1][0,1,2,2]都将返回False。

我试着写了:

public static boolean isPermutation (int[] array) {
    boolean isPermutation =true ;
      for (int i = 0 ; i<array.length & isPermutation; i = i+1) {
          for (int j = 1 ; j<array.length & isPermutation; j = j+1) {
              if (array[i]==array[j]|(array[i]>=array.length)) {
                  isPermutation =false ;
              }
          }
      }
      return isPermutation ;
}

问题是,当我们检查数组[i]==数组[j]时,当i等于j而不是数组中的数字时,它等于。

有人能帮忙吗?

共有2个答案

翁钧
2023-03-14

通过使用集合,可以轻松检查数组中是否有相同的数字,因为集合只存储每个数字的一次出现,然后在一个循环中检查所有数字是否在0范围内。。大堆长度-1:

public static boolean isPermutation (Integer[] array) {
    int length = array.length;

    Set<Integer> set = new HashSet<Integer>(Arrays.asList(array));
    if (set.size() < length)
        return false;

    for (int x : array) {
        if ((x < 0) || (x > length - 1))
            return false;
    }

    return true;
}

public static void main(String[] args) {
    Integer[] a = {0, 1, 3, 2};
    Integer[] b = {0, 1, 3, 1};
    Integer[] c = {0, 1, 3, -1};

    System.out.println(isPermutation(a));
    System.out.println(isPermutation(b));
    System.out.println(isPermutation(c));
}

将打印:

true
false
false

或者更好地避免循环,方法是仅使用有效值将集合过滤到列表,并检查列表大小是否等于数组长度:

public static boolean isPermutation (Integer[] array) {
    int length = array.length;
    Set<Integer> set = new HashSet<Integer>(Arrays.asList(array));
    if (set.size() < length)
        return false;
    List<Integer> list = set.stream().filter(x -> x >= 0 && x < length).collect(Collectors.toList());
    return list.size() == length;
}
姜泳
2023-03-14

您可以在for循环中避免for循环,并可以利用数学优势,不断添加所有数字,最后检查实际和是否等于预期和,然后返回true或false。如果所有数字都在范围内并且只出现一次,则它们的总和将等于所有数字1到N的总和。同时,在扫描数组中的数字时,如果遇到任何大于数组长度-1或小于零的数字,可以立即返回false。

下面是一些可能会有所帮助的代码

public static boolean areNumbersInclusive(int[] arr) {
    long sum = 0;

    for (int n : arr) {
        if (n > arr.length - 1 || n < 0) {
            return false;
        }
        sum += n;
    }

    long intendedSum = ((arr.length - 1) * arr.length) / 2; // sum from 1 to n is n*(n+1)/2

    return intendedSum == sum;
}

public static void main(String args[]) {
    int[] arr1 = {1,0,5,3,2,4};
    int[] arr2 = {1,0,3,4};
    int[] arr3 = {-1,0,3,2};
    int[] arr4 = {1,0,3,2};

    System.out.println(areNumbersInclusive(arr1));
    System.out.println(areNumbersInclusive(arr2));
    System.out.println(areNumbersInclusive(arr3));
    System.out.println(areNumbersInclusive(arr4));
}

这将按预期打印以下输出。

true
false
false
true

这是OP方法的正确版本,尽管我的答案可以避免嵌套for循环。

public static boolean isPermutation(int[] array) {
    for (int i = 0; i < array.length; i++) {
        if (array[i] >= array.length || array[i] < 0) {
            return false;
        }
        for (int j = i + 1; j < array.length; j++) {
            if (array[i] == array[j]) {
                return false;
            }
        }
    }

    return true;
}
 类似资料:
  • 本文向大家介绍ActionScript 3 0到1之间的随机数,包括了ActionScript 3 0到1之间的随机数的使用技巧和注意事项,需要的朋友参考一下 示例 产生介于0(含)和1(不含)之间的均匀分布的随机数 输出示例: 0.22282187035307288 0.3948539895936847 0.9987191134132445

  • 我正在尝试编写递归方法,如果存在从[0]到[a.length-1]的路径,当您可以对a[I]求和或求减法时,该方法将返回true。例如,在数组a={2,4,1,6,4,2,4,3,5}中,该方法返回true,因为0 2-1 4 2-3 4=8=a[a.length-1]。我尝试了一些方法,但我得到了堆栈溢出或错误的输出。

  • @PeterLawrey我稍微调整了代码如下,因为我只需要洗牌,这是一个享受,我会弹出卡片的堆栈来处理 感谢彼得和所有其他贡献者。M.

  • 本文向大家介绍JavaScript返回0-1之间随机数的方法,包括了JavaScript返回0-1之间随机数的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript返回0-1之间随机数的方法。分享给大家供大家参考。具体如下: JavaScript的Math对象的random方法可以返回一个0-1之间随机数 希望本文所述对大家的javascript程序设计有所帮助。

  • 我想通过在Python中给出一个介于0和1之间的种子来生成固定随机数列表。例如,l=[0.1,0.5,0.6,0.9,0.75]。我可以通过使用random.random()得到这个。但每次它都给出一个新的随机数列表。我想通过给一些种子来解决它。 我怎么能那么做。提前感谢!

  • 问题内容: 我需要检查数组以查看用户输入是否已经存在,并显示一条有关是否存在的消息。第一部分工作正常,但是我尝试创建一种用于单词检查的方法,我不确定自己是否走对了,干杯。 问题答案: 对。您显然已经经历了一个糟糕的思考过程,所以让我们清理一下状况,重新思考一下。 第一步:您需要一些用户输入 第二步:将其与所有先前的用户输入进行比较,以查看是否存在。 如果存在,则返回一条消息,指示已输入值。 否则忽