LeetCode-消失的数字
非商业,LeetCode链接附上:
https://leetcode-cn.com/problems/missing-number-lcci/
进入正题。
题目:
数组nums
包含从0
到n
的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在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)
分析:
主要利用了“异或”的性质:
- 0和任何值的异或等于本身,即:A ^ 0 = A
- 异或本身等于0,即 A ^ A = 0
- 异或满足结合律,即 A ^ B ^ C = A ^ ( B ^ C)
- 异或满足交换律,即 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