一个长度为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
限制:
- 1 <= 数组长度 <= 10000
分析:
方法:二分法
从中间开始查找,如果中间值和它索引一样,那么目标数字在右边,不一样,目标数字在左边,继续遍历,直到边界重合,判断索引值是否为目标数字即可。
时间复杂度:O(log n)
空间复杂度:O(1)
class Solution {
public int missingNumber(int[] nums) {
//定义二分点,左右边界
int index, i = 0, j = nums.length-1;
//遍历
while(i < j){
index = (i + j) / 2;
//索引和值相等,在右边
if(nums[index] == index){
i = index + 1;
}
//索引和值不相等,在左边
else{
j = index - 1;
}
}
return i == nums[i] ? i+1: i;
}
}
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof