做题是真快乐呀-【异或】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

结果截图:

改进&感悟:

扩展思路&代码:

  • 利用异或的性质:
  • 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)

(原来是加了注释影响了速度呀)

参考资料:

AI:什么是异或?

灵山题解:https://leetcode.cn/problems/single-number/solutions/2481594/li-yong-yi-huo-de-xing-zhi-fu-ti-dan-pyt-oizc

附:其他题单

题单: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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @ 2024-03-20 11:29  o蹲蹲o  阅读(4)  评论(0编辑  收藏  举报