面试题53_2:0-n-1中缺失的数字

2019-11-12  本文已影响0人  繁星追逐

0~n-1中缺失的数

思路一:
分别计算0-n-1的和n*(n-1)/2
* 和数组和
* 求差

思路二:
我们知道,在缺失的元素出现前,每一个数都和数组元素的下标相等,由于一个位置缺失了元素,所以下一个位置的元素出现在其位置上,于是问题可以转化为找出第一个元素和下标不相等的位置的索引。
利用二分法查找,如果当前位置元素和索引不相等,并且前一个元素也不相等,则去左边寻找,相等则返回元素。如果当前位置元素与索引相等则去右边寻找。
代码如下:

/**
     * 二分查找
     * @param array
     * @return
     */
    public int findLoss(int[] array) {
        if (array == null) return -1;
        int low = 0;
        int len = array.length;
        int high = len -1;
        while (low <= high){
            int mid = (low+high)>>1;
            if (mid != array[mid]){
                if (mid == 0 || mid-1 == array[mid-1]){
                    return mid;
                }else {
                    high = mid-1;
                }
            }else {
                low = mid + 1;
            }
        }
        if (low == len) return len;
        //  无效的输入数组,如不是递增排序,或者有的数字超出了0~n-1的范围
        return -1;
    }
上一篇 下一篇

猜你喜欢

热点阅读