LeetCode-消失的数字

 

非商业,LeetCode链接附上:

https://leetcode-cn.com/problems/missing-number-lcci/

进入正题。

 

题目:

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

 

示例:

示例 1:

输入:[3,0,1]

输出:2

 

示例 2:

输入:[9,6,4,2,3,5,7,0,1]

输出:8

  

代码实现:

public int missingNumber(int[] nums) {

        int res = 0;
        for (int i = 0; i < nums.length; i++) {
            res ^= i;
            res ^= nums[i];
        }
        res ^= nums.length;//由于缺少一个数,for循环中的少做了一次 "res ^= i" 的操作,在这里补上

        return res;
}
//时间复杂度O(n),空间复杂度O(1)

 

分析:

主要利用了“异或”的性质:

  1. 0和任何值的异或等于本身,即:A ^ 0 = A
  2. 异或本身等于0,即 A ^ A = 0
  3. 异或满足结合律,即 A ^ B ^ C = A ^ ( B ^ C)
  4. 异或满足交换律,即 A ^ B = B ^ A

 

附注:

https://leetcode-cn.com/problems/missing-number-lcci/solution/onshi-jian-fu-za-du-o1kong-jian-fu-za-du-shi-xian-/

 

--End

 

posted @ 2020-11-28 12:11  黑冰台  阅读(175)  评论(0)    收藏  举报