一.题目解析

题目中说没有重复的元素,且为单调增的.
我们可以发现这个题目有很多解法,我们简单讲一下各种方法
1.哈希表
2.暴力解法(直接遍历)
3.位运算(相同数会抵消)
4.数学方法(高斯求和法)
但是最优秀的算法其实是二分算法
要使用二分算法我们就需要找到二段性
我们发现目标左边是数字与数字下标一定是相同的,而右边是一定大于的

我们还需要考虑一个边界条件
当缺失的数字在最右边的时候,此时我们的数组就是一个来连续的,没有跳跃点的单增数组[0,1,2,3],此时缺失的是最后一个数加一,所以单left==right时.就是right+1才是最终答案
二.代码实现
cpp
class solution
{
public:
int missingnumber(vector<int>&nums)
{
int left=0,right=nums.size()-1;
while(left<right)
{
int mid=left+(right=left)/2;
if(mid==nums[mid]) left=mid+1;
else right=mid;
}
//处理边界问题
return nums[left]=left?left+1:left
}
}