- 题目描述
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1
内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
- 题解
1. 直接进行遍历即可
2. 有序+查找,首先想到二分法
- 代码
class Solution {
public:
int missingNumber(vector<int>& nums) {
if (nums[0]!=0) return 0;
for (int i=1;i<nums.size();i++){
if (nums[i]!=nums[i-1]+1) return i;
}
return nums.size();
}
};
class Solution {
public:
int missingNumber(vector<int>& nums) {
if (nums[0]!=0) return 0;
int l=0,h=nums.size()-1;
while (l<=h){
int m=l+((h-l)>>1);
if (nums[m]==m) l=m+1;
else h=m-1;
}
return l;
}
};
class Solution {
public:
vector<int> missingNumber(vector<int> nums) {
if (!nums.size()) return {};
int start=nums[0];
vector<int> res;
for (int i=0;i<nums.size()-1;i++){
for (int j=nums[i]+1;j<nums[i+1];j++) res.push_back(j);
}
return res;
}
};