给定一个包含 [0, n]
中 n
个数的数组 nums
,找出 [0, n]
这个范围内没有出现在数组中的那一个数。
法一:用异或。由于[0,n]中会出现在数组中的数字会与一个下标值相等,所以可以将所有下标值和存在的数字看成一个序列,然后使用挨个异或的方法:若一个下标值没有对应相等的数字,则最后会显现出来。
class Solution {
public:
int missingNumber(vector<int>& nums) {
int res = nums.size();
for (int i = 0; i < nums.size(); ++i){
res ^= nums[i];
res ^= i;
}
return res;
}
};
法二:对数组所有数字求和sum,0~n应有的和减去sum。
class Solution {
public:
int missingNumber(vector<int>& nums) {
int n=nums.size();int sum=0;
for(int i=0;i<nums.size();i++)sum+=nums[i];
return n*(n+1)/2-sum;
}
};