268. Missing Number

原题

  • 题目描述:长为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;
}
发布了80 篇原创文章 · 获赞 35 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章