- 題目描述:長爲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;
}