题目链接:https://leetcode-cn.com/problems/missing-number/
题目如下:
解法一:原地哈希
class Solution {
public:
int missingNumber(vector<int>& nums) {
for(int i=0;i<nums.size();i++){
while(nums[i]<nums.size()&&nums[i]!=nums[nums[i]]){
swap(nums[i],nums[nums[i]]);
}
}
for(int i=0;i<nums.size();i++){
if(nums[i]!=i) return i;
}
return nums.size();
}
};
解法二:数学公式直接算
class Solution {
public:
int missingNumber(vector<int>& nums) {
int n=nums.size();//数组中存放了n-1个数
int real_sum=(n+1)*(0+n)/2;
int sum=0;
for(auto e:nums)
sum+=e;
return real_sum-sum;
}
};
解法三:位运算(推荐)
class Solution {
public:
int missingNumber(vector<int>& nums) {
int size=nums.size();
int result=0;
//异或中,出现偶数次的数会被抵消
for(int i=0;i<=size;++i) result^=i;
for(auto e:nums) result^=e;
return result;
}
};