我试图弄清楚如何检查我的阵列中的所有23个数字(数字是随机生成的)是否彼此不相等但我无法弄清楚如何在没有如果声明超级荒谬。还有其他办法吗?另一种选择是检查数组中的任何两个数字是否相等但我提出问题的原因是因为我认为检查每对的相等性比检查所有数字的不等式更难。
答案 0 :(得分:0)
您可以使用以下算法来测试每个数组元素是否都是唯一的:
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
。
答案 1 :(得分:0)
您的问题可以通过两个嵌套的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 :(得分:0)
如果您的数字上限相对较低(比如少于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;
}