这道题的题目意思就是从0-n中的数字中找出缺失的那一个,n是数组的长度,因此我的想法就是先将数组进行排序,往sort()里面一扔,完了以后看前一个与后一个之差中哪个不是等于1的,就求出来即可。
法一:
也就是我自己的想法
cpp
class Solution {
public:
int missingNumber(vector<int>& nums) {
//首先排序,然后再找
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size();i++){
cout<<nums[i];
}
cout<<endl;
int n=nums.size();
//考虑最后一个数不在其中的情况
if(nums[n-1]!=n) return n;
//主要是考虑0-n之间的缺数的情况
for(int i=1;i<n;i++){
if(nums[i]-nums[i-1]!=1){
cout<<nums[i]<<nums[i-1];
return (nums[i]+nums[i-1])/2;
}
}
return 0;
}
};
还有两个方法:
- 一个是把它扔到unordered_set里面,利用其count()方法+循环遍历看差了哪个就行
- 以及就是我们用和之差的方式,就是求在没有缺失的情况下的S,也就是和,然后与缺失了?数字相减,即可得到
cpp
class Solution {
public:
int missingNumber(vector<int>& nums) {
int miss=-1;
unordered_set<int>set;
int n=nums.size();
for(int i=0;i<n;i++){
set.insert(nums[i]);
}
for(int i=0;i<=n;i++){
if(!set.count(i)){
miss=i;
break;
}
}
return miss;
}
};