面试题 17.04. 消失的数字

2022-01-26  本文已影响0人  itbird01
题目.png

题意:数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?

解法1:
我们假设数组异或结果为 123...^1000 = T (此时的T中包含两个n),那么根据结合律和自反律,T^n 实际上就是1~1000的实际值的异或结果,原因的话,很简单,T中的两个n异或之后为0,也就是说T中已经没有n了,所以 T^n == 1~1000的实际值的异或结果
由上面的推导可知,我们把T再和1~1000的异或结果 去异或,则为所求的结果n

解题遇到的问题

后续需要总结学习的知识点

##解法1
class Solution {
    public int missingNumber(int[] nums) {
        int k = nums.length, k1 = 0;
        for (int i = 0; i < nums.length; i++) {
            k = k ^ i;
            k1 = k1 ^ nums[i];
        }
        return k ^ k1;
    }
}
上一篇下一篇

猜你喜欢

热点阅读