【leetcode】只出现一次的数字III

这篇博客探讨了两种解决LeetCode的单数元素问题的方法。第一种是利用哈希表,通过遍历数组,将出现两次的元素从哈希表中移除,最后返回哈希表中剩下的两个元素。第二种方法是运用位运算,通过异或操作找到两个不同的单数元素。博客详细解释了位运算的思路,包括如何找出不同元素的分类位,并展示了如何根据分类位进行元素划分。
摘要由CSDN通过智能技术生成

哈希表,时间和空间复杂度都是O(n)

class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        # Solution 1: 哈希表,时间和空间复杂度都是O(n)
        hash_map = {}
        for num in nums:
            if hash_map.has_key(num):
                # 在哈希表中,表示已经出现过一次,那么从哈希表中删除
                hash_map.pop(num)
            else:
                # 不在哈希表中,添加到哈希表中
                hash_map[num] = 1
        # 哈希表中剩余两个数字
        result = []
        for key, _ in hash_map.items():
            result.append(key)
        return result

位运算

class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
       
        # Solution 2: 位运算
        x = 0
        for num in nums:
            x = x ^ num
        lowbit = x & (-x) # Note(1)
        res1, res2 = 0, 0
        for num in nums:
            if num & lowbit: # Note(2)
                res1 = res1 ^ num
            else:
                res2 = res2 ^ num
        return [res1, res2]

Note:
(1)这里查找出res1和res2不同的位,res1和res2的lowbit分别是0和1,位运算太奇妙了,看不出来位置,也就是根据它做分类
(2)这里查找是在分类啊!太奇妙了~感觉炸裂

另一种位运算

在这里插入图片描述

参考题解:https://leetcode.cn/problems/single-number-iii/solutions/1073727/gong-shui-san-xie-yi-ti-shuang-jie-ha-xi-zgi4/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值