268. Missing Number 找出缺失的数

来源:互联网 发布:淘宝联盟自己买自己的 编辑:程序博客网 时间:2024/04/28 02:18

题目:从0, 1, 2, ..., n 选出不同的n个数,找出未选中的哪一个。

Given nums = [0, 1, 3] return 2.

分析:

0,... n 中有 n + 1个数, 所以有一个数没有选中。

我们知道 a xor a = 0, 然后,在这里,我们将数组中的值,与下标进行异或。

以[0, 1, 3] 为例,

下标为0, 1, 2, 3 (额外增加的)

值为   0,  1 , 3 

那么就可以两两消掉了,剩下的单个的即missing number。

显示了位运算的巧妙性。

复杂度:

时间复杂度:0 (n)

空间复杂度:0 (1)

代码:

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



1 0
原创粉丝点击