我需要编写一个程序来检查数组中的所有数字是否介于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
而不是数组中的数字时,它等于。
有人能帮忙吗?
通过使用集合,可以轻松检查数组中是否有相同的数字,因为集合只存储每个数字的一次出现,然后在一个循环中检查所有数字是否在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;
}
您可以在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()得到这个。但每次它都给出一个新的随机数列表。我想通过给一些种子来解决它。 我怎么能那么做。提前感谢!
问题内容: 我需要检查数组以查看用户输入是否已经存在,并显示一条有关是否存在的消息。第一部分工作正常,但是我尝试创建一种用于单词检查的方法,我不确定自己是否走对了,干杯。 问题答案: 对。您显然已经经历了一个糟糕的思考过程,所以让我们清理一下状况,重新思考一下。 第一步:您需要一些用户输入 第二步:将其与所有先前的用户输入进行比较,以查看是否存在。 如果存在,则返回一条消息,指示已输入值。 否则忽