做题是真快乐呀-【异或】136. 只出现一次的数字
题目:136. 只出现一次的数字
我的思路:
- 遍历一遍,做哈希映射。
- 再遍历一遍,找到结果为1的那个,就是答案
我的代码:
class Solution:
def singleNumber(self, nums: List[int]) -> int:
dic = {}
for i in nums:
dic[i] = dic.get(i,0) + 1
ans = 0
for k,v in dic.items():
if v ==1:
ans = k
break
return ans
结果截图:
改进&感悟:
- 看了别人的题解,居然可以用【异或】这个思路。
- AI:什么是异或?
扩展思路&代码:
- 利用异或的性质:
- a ^ a = 0
- a ^ 0 = a
代码:
class Solution:
def singleNumber(self, nums: List[int]) -> int:
# 利用异或来做题
ans = 0
for i in nums:
ans = ans ^ i
return ans
(怎么还慢了呢)
灵神的写法:
class Solution:
def singleNumber(self, nums: List[int]) -> int:
# 利用异或来做题
# 用reduce
return reduce(xor,nums)
(原来是加了注释影响了速度呀)
参考资料:
附:其他题单
题单:XOR
1720. 解码异或后的数组
2433. 找出前缀异或的原始数组
1310. 子数组异或查询
2683. 相邻值的按位异或
1829. 每个查询的最大异或值
1442. 形成两个异或相等数组的三元组数目
2429. 最小 XOR
2527. 查询数组 Xor 美丽值
2425. 所有数对的异或和
2317. 操作后的最大异或和
附
从集合论到位运算,常见位运算技巧分类总结!
往期题解精选(按 tag 分类)
作者:灵茶山艾府
链接:https://leetcode.cn/problems/single-number/solutions/2481594/li-yong-yi-huo-de-xing-zhi-fu-ti-dan-pyt-oizc/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。