zoukankan      html  css  js  c++  java
  • 力扣刷题记录(2021.2.9) 剑指 Offer 53

    题目描述

    一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。


       示例1

    输入: [0,1,3]
    输出: 2

    示例2
    输入: [0,1,2,3,4,5,6,7,9]
    输出: 8


    思路:使用二分查找,刚开始写的算法用
    mid-left和right-mid的值比较
    来判断缺失值在mid的左边还是右边,但后面发现是多余的
    实际上这是一个有序的升序列,我们只要判断
    num[mid]==mid即可,如果等于就证明缺失值在mid的右面
    如果不等于则证明缺失值在mid的左面
    算法如下


    public int missingNumber1(int[] nums) {
    int left = 0;
    int right = nums.length - 1;
    while (left <= right) {
    int m = (left + right) / 2;
    if (nums[m] == m) {
    //缺失在右边
    left = m + 1;
    } else {
    //缺失值在左边
    right = m - 1;
    }
    }
    return left;
    }
     
  • 相关阅读:
    Mysql数据查询
    Mysql数据类型
    desc和show
    Mysql权限管理
    深入理解inode和硬链接和软连接和挂载点
    Linux用户和组
    VIM文本编辑器
    Linux文件操作
    MySQL基础
    八大排序
  • 原文地址:https://www.cnblogs.com/spx88/p/14392043.html
Copyright © 2011-2022 走看看