剑指 Offer-0~n-1中缺失的数字

Posted 数据结构和算法

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer-0~n-1中缺失的数字相关的知识,希望对你有一定的参考价值。

截止到目前我已经写了 500多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载
下载链接https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取码:6666


public int missingNumber(int[] nums) {
    int xor = 0;
    for (int i = 0; i < nums.length; i++)
        xor ^= nums[i] ^ (i + 1);
    return xor;
}

或者还可以这样写,原理都是一样的

public int missingNumber(int[] nums) {
    int xor = 0;
    for (int i = 0; i < nums.length; i++)
        xor ^= nums[i] ^ i;
    return xor ^ nums.length;
}

public int missingNumber(int[] nums) {
    int length = nums.length;
    int sum = (0 + length) * (length + 1) / 2;
    for (int i = 0; i < length; i++)
        sum -= nums[i];
    return sum;
}

public int missingNumber(int[] nums) {
    int length = nums.length;
    for (int i = 0; i < length; i++) {
        if (nums[i] != i)
            return i;
    }
    return length;
}

public int missingNumber(int[] nums) {
    int start = 0;
    int end = nums.length - 1;
    while (start < end) {
        int mid = start + (end - start) / 2;
        if (nums[mid] == mid) {
            //如果nums[mid] == mid也就是说当前元素的
            //下标等于他自己,比如数组[0,1,2,3,4,5]每
            //个元素的下标都等于他自己,说明[start,mid]
            //没有缺少任何数字,那么缺少的肯定是在[mid+1,end]
            start = mid + 1;
        } else {
            //如果当前元素的下标不等于他自己,比如[0,1,2,4]中
            //nums[3]==4,说明说明缺少的数字就在这个区间内
            end = mid;
        }
    }
    //如果类似于[0,1,2,3]这种start指向了数组的最后一个,我们让他加1
    return start == nums[start] ? start + 1 : start;
}

当然还可以换种写法

public int missingNumber(int[] nums) {
    int start = 0;
    int end = nums.length - 1;
    while (start <= end) {
        int mid = start + (end - start) / 2;
        if (nums[mid] == mid) {
            //如果nums[mid] == mid也就是说当前元素的
            //下标等于他自己,比如数组[0,1,2,3,4,5]每
            //个元素的下标都等于他自己,说明[start,mid]
            //没有缺少任何数字,那么缺少的肯定是在[mid+1,end]
            start = mid + 1;
        } else {
            //注意这里写法和上面代码不一样
            end = mid - 1;
        }
    }
    return start;
}

以上是关于剑指 Offer-0~n-1中缺失的数字的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段

剑指Offer面试题53 - II. 0~n-1中缺失的数字

算法剑指 Offer 53 - II. 0~n-1中缺失的数字

剑指 Offer 53 - II. 0~n-1中缺失的数字

剑指offer python版 0到n-1中缺失的数字

剑指OFFER----面试题53 - II. 0~n-1中缺失的数字