描述
给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。
分析
在原数组的基础上再^上0~n的数,利用异或^排除掉出现两次的数值。
class Solution {
public int missingNumber(int[] nums) {
int ans = 0;
for(int i = 0; i < nums.length; i++){
ans ^= nums[i];
ans ^= i;
}
return ans ^ nums.length;
}
}
排序后找到第一个不匹配的数,然后判断是不是缺失的数
class Solution {
public int missingNumber(int[] nums) {
Arrays.sort(nums);
int left = 0, right = nums.length - 1;
while(left != right){
int mid = (right - left) / 2 + left;
if(nums[mid] == mid) left = mid + 1;
if(nums[mid] != mid) right = mid;
}
if(left == nums[left]) return ++left;
return left;
}
}