- 题目描述:长为n的数组,元素值为0~n,且不重复,求你找出未曾出现的那个数字
- 思路:借助XOR异或操作的特性即
a^b^b=a
的骚操作是最快的
移位实现
int missingNumber(int* nums, int numsSize) {
int res=numsSize;
for(int i=0;i<numsSize;i++){
res=res^i^nums[i];
}
return res;
}
标记数组实现
class Solution {
public int missingNumber(int[] nums) {
int[] res=new int[nums.length+1];
for(int i=0;i<nums.length;i++){
res[nums[i]]=1+nums.length;
}
for(int i=0;i<res.length;i++){
if(res[i]<nums.length){
return i;
}
}
return 0;
}
}
二分查找法
public int missingNumber(int[] nums) { //binary search
Arrays.sort(nums);
int left = 0, right = nums.length, mid= (left + right)/2;
while(left<right){
mid = (left + right)/2;
if(nums[mid]>mid) right = mid;
else left = mid+1;
}
return left;
}