题目:
- 给定一个包含 0, 1, 2, …, n 中 n 个数的序列,
- 找出 0 … n 中没有出现在序列中的那个数。
例子:
示例1:
输入: [3,0,1]
输出: 2
示例2:
输入: [9,6,4,2,3,5,7,0,1]
输出: 8
思路:
- 采用位运算:
- 异或运算(XOR):相同的数异或后是0,不同的数异或后是1
- 异或运算满足交换律
举例说说思路:
可以看出,上面的数组缺失的元素是2;数组长度是3;
我们这样做: 数组的元素和其对应的下标进行异或,最后再异或数组的长度:
即就是:(3^0) ^(0 ^1) ^(1 ^2) ^3 = (3 ^ 3) ^(0 ^0) ^(1 ^1) ^2 = 0 ^ 0 ^ 0 ^ 2 = 2
代码:
class Solution:
def missingNumber(self,nums):
missing = len(nums) # missing是数组的长度
for i, num in enumerate(nums): # 循环遍历,得到数组的index和value
missing ^= i ^ num # 数组元素和其对应下标进行异或,再和数组长度异或
return missing # 返回缺失值
# 验证
solution = Solution()
nums = [3,0,1]
print(solution.missingNumber(nums))
# 输出:
[2]
复杂度:
时间复杂度: O(n)
空间复杂度: O(1)