解法一:排序
将nums数组进行排序(从小到大),然后遍历数组,此时数组每个值等于其索引(下标),若不满足,则意味着该数字缺失,返回。
class Solution {
public:
int missingNumber(vector<int>& nums) {
sort(nums.begin(), nums.end());
int n = nums.size();
for (int i = 0; i <= n-1; ++i) {
if (nums[i] != i) return i;
}
return n;
}
};
解法二:位运算
这里运用位运算里的异或“^”,已知0^x = x, x^x=0; 定义int ans = 0;
1.遍历,将ans先^=(0~i)
2.遍历数组,将ans分别^= nums[i], 根据上面的两个公式和结合率,可知,最后只剩数组nums里缺失的数字,因为其只异或了一次,输出ans即可。
class Solution {
public:
int missingNumber(vector<int>& nums) {
int ans = 0;
for (int i = 0; i <= nums.size(); ++i) {
ans ^= i;
}
for (int i = 0; i < nums.size(); ++i) {
ans ^= nums[i];
}
return ans;
}
};