如何检查一组数字是否有差距?

时间:2015-05-05 12:45:14

标签: java arrays long-integer

我有一个包含这些数字的Long数组:

long[] = {1,2,3,5,6,7};

请注意4缺失。 如果存在任何此类间隙,测试此阵列的最佳方法是什么?

3 个答案:

答案 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;
}

此方法首先检查“简单”情况,然后迭代数组以检查更复杂的情况。