题目
思路
第一个思路是利用数学公式来对于nums做差得出答案;
第二个思路我觉得比较经典就是利用异或运算。因为异或有两个独特的性质:
0与任何数异或都是那个数
任何数与自身异或都是0;
所以我们可以利用这个性质对nums的所有元素求一次异或(相同是0,不同是1),然后再对0-n内的所有数进行一次异或运算,所得到的就是缺失的数
AC代码
代码1
class Solution {
public:
int missingNumber(vector<int>& nums) {
int len=nums.size(),sum=0;
for(int i=0;i<len;++i){
sum+=nums[i];
}
return len*(len+1)/2 - sum;
}
};
代码2
class Solution {
public:
int missingNumber(vector<int>& nums) {
int len=nums.size(),res=0;
for(auto t:nums) res^=t;
for(int i=0;i<=len;++i) res^=i;
return res;
}
};
后记
异或yyds!