// 解法一:异或运算 0~n-1一共n个数,数组中只有n-1个数 将数组元素与下标异或
// 数组中出现的元素一定会被异或操作消掉
class Solution {
public:
int missingNumber(vector<int>& nums) {
int res=nums.size();
for(int i=0;i<nums.size();i++){
res^=nums[i]^i;
}
return res;
}
};
// 解法二:二分法 找到第一个下标与值不同的位置
class Solution {
public:
int missingNumber(vector<int>& nums) {
int left=0, right=nums.size()-1;
while(left<=right){
int mid=left+(right-left)/2;
if(nums[mid]!=mid){
right=mid-1;
}
else if(nums[mid]==mid){
left=mid+1;
}
}
return left;
}
};