题目链接
思路分析
题目中提到了递增排序就意味着我们可能能够使用二分法来进行求解
- 如果是用二分法,题目中没有给出target,但是数的范围和数组的大小是有关系的
- 我们可以依据下标和数值来进行判断,对于一个数,他只有两种方案
- 1. nums[i] == i 如果相同,说明缺失的数字还在数组的后面,因此让左指针++
- 2. nums[i] != i 如果不相同,说明此处已经出现缺失的数字,因此让右指针– - 当循环跳出时,说明找到了最后一个不同的数字,该数字下标就是我们要求解的值
代码实现
class Solution {
public:
int missingNumber(vector<int>& nums) {
//二分查找
int left = 0;
int right = nums.size()-1;
while(left <= right)
{
int mid = left + (right - left)/2;
if(nums[mid] != mid)
right--;
else
left++;
}
return left;
}
};