剑指No.53-2_n-1中缺失的数字
- 题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
示例:输入: [0,1,2,3,4,5,6,7,9]
输出: 8
- 排序数组中的搜索问题,要首先考虑二分查找。本题与53-1是同一个思路【剑指offer刷题笔记】53-1.在排序数组中查找元素
- 利用二分查找
public int missingNumberWay(int[] nums){
int left = 0;
int right = nums.length - 1;
while (left <= right){
int middle = (left + right) / 2;
// 看middle处的元素是否与当前数组下标相等,相等说明缺失元素在右边,不相等说明在左边
// 因为数组元素既然是有序的,那么如果还没发生缺失,数据下标大小必定对应数组上的值
if (nums[middle] == middle)
left = middle + 1;
else
right = middle - 1;
}
// 最后结束循环时left的数值就是缺失元素的数值
return left;
}