题目
分析
遍历
- 从零开始递增1,判断当前下标是否和当前数字相等,不相等当前小标就是缺失的数字
- 时间复杂度:O(n)
二分
- 左边和右边下标相加应该等于下标数字,不等于就是中间有缺失
- 等于说明在中间往后l往前,不等于说明在中间往前r往后
- 知道l>r时
- l下标就是缺失的小标
- 等于说明在中间往后l往前,不等于说明在中间往前r往后
代码
class Solution {
public:
int missingNumber(std::vector<int>& nums)
/*遍历*/
//for(int i =0;i < nums.size();i++)
//{
// if(nums[i] != i)
// {
// return nums[i];
// }
//}
//return nums.size();
/*二分*/
int l = 0,r = nums.size() - 1;
while(l <= r)
{
int mid = (l + r) / 2;
if(nums[mid] == mid)
{
l = mid + 1;
}
else
{
j = mid - 1;
}
}
return l;
}
};