力扣刷题记录(2021.2.9) 剑指 Offer 53 - II. 0~n-1中缺失的数字

题目描述

一个长度为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;
}
 
posted @ 2021-02-09 10:21  spx88  阅读(59)  评论(0编辑  收藏  举报