Problem: 136. 只出现一次的数字
文章目录
- 思路
- 解题方法
- 复杂度
- Code
思路
- 最暴力的想法是遍历+查数(list.count方法),此时时间复杂度为,空间复杂度为
- 可以用哈希表优化,python的set和dict基于哈希表,所以可以用来计数。对于set而言,遍历数组,如果该数不在set中,则将该数加到set中,否则删掉,最终留在set中的一定是只出现一次的元素。dict用来计数即可。需要注意的是set和dict的in方法时间复杂度都是。此时时间复杂度为,空间复杂度为
- 最优解是利用异或运算
解题方法
异或运算
- 任何数与0进行异或仍然是本身
- 任何数与自身异或等于0
- 异或运算满足交换律和结合率
复杂度
时间复杂度:
空间复杂度:
Code
class Solution:
def singleNumber(self, nums: List[int]) -> int:
'''
异或的性质:
1. 任何数与0异或仍然等于本身
2. 任何数与自身异或等于0
3. 异或满足交换律和结合律
成对出现的数据会与自身异或,变为0
只有出现一次的数据会与0异或,返回本身
'''
x = 0
for i in nums:
x ^= i
return x