我有一个包含这些数字的Long数组:
long[] = {1,2,3,5,6,7};
请注意4
缺失。
如果存在任何此类间隙,测试此阵列的最佳方法是什么?
答案 0 :(得分:3)
如果您确保订购的数组没有任何重复,那么您可以在O(1)中检查
我认为此代码应该适用于这种特定情况:)
//assume that given array is ordered and has no duplicated value
long[] myarray = {5,6,7}; //no gap
long[] myarray1 = {1,2,4}; //has gap
long[] myarray2 = {10,11,12,13,14,15}; //no gap
//return true if has gap
//return false if no gap
//throw null-pointer if empty
public static boolean checkIfHasGap(long[] array) {
if (array.length == 0) {
throw new NullPointerException("Given Array is empty");
} else {
return array[0] + array.length != array[array.length - 1] + 1;
}
}
答案 1 :(得分:0)
循环遍历数组并检查当前项目是否比当前索引更x
,其中x
是数组中的第一个元素。
public boolean hasGaps(long[] array) {
if(array == null || array.length == 0) {
return false;
}
long start = array[0];
for(int i = 0; i < array.length; i++) {
if(array[i] != i + start) {
return true;
}
}
return false;
}
答案 2 :(得分:0)
public static boolean hasGaps(long[] array) {
if (array == null || array.length == 0) {
return false;
}
if (array[array.length - 1] - array[0] + 1 != array.length) {
return true;
}
for (int i = 1; i < array.length; i++) {
if (array[i] != array[i - 1] + 1) {
return true;
}
}
return false;
}
此方法首先检查“简单”情况,然后迭代数组以检查更复杂的情况。