题解 | #缺失数字# | 二分查找 | JAVA

缺失数字

http://www.nowcoder.com/practice/9ce534c8132b4e189fd3130519420cde

二分法,套二分法框架即可

二分法 伪代码。。。

        int left = 0, right = a.length - 1;
        while (left <= right) {
            int mid = left + ((right - left) >> 1);
            if (a[mid] == mid) {
                return mid;
            }else if(a[mid] > mid){
                right = mid - 1;
            }else if(a[mid] < mid){
                left = mid + 1;
            }

        }
        return -1;

这里的思路是

  • 下标也是值, a[index] 一定等于 index
  • 如果中间缺失的话 。 a[index] > index 值了,值就一定会在左边。
  • 不断缩小左边范围,右边范围, 最后左边跟右边下标相等就是缺失的值

按照这个思路写出如下代码

 /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 找缺失数字
     * @param a int整型一维数组 给定的数字串
     * @return int整型
     */
      public int solve(int[] a) {
        int left = 0, right = a.length - 1;
        while (left <= right) {
            int mid = left + ((right - left) >> 1);
            // 如果相等 一定是在右边 。因为缺失则会 a[index] > index
            if (a[mid] == mid) {
                left = mid + 1;  //缩小左边范围
            }else if(a[mid] > mid){
                right = mid - 1;  // 缩小右边范围
            }else if(a[mid] < mid){  //这里是套模板
                left = mid + 1;
            }

        }
        return left;
    }
全部评论
else if(a[mid] < mid){ //这里是套模板 left = mid + 1; } 这一句多余了 因为不会出现这种情况 如果在左边a[mid]>mid;如果在右边a[mid]=mid
点赞 回复 分享
发布于 2021-07-28 16:05

相关推荐

点赞 评论 收藏
分享
你见过凌晨四点的牛客吗_BY_KobeBryant:明年再投都一样😂😂
点赞 评论 收藏
分享
03-26 15:18
已编辑
华北水利水电大学 Java
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务