美文网首页
Leetcode_260_只出现一次的数字Ⅲ_hn

Leetcode_260_只出现一次的数字Ⅲ_hn

作者: 1只特立独行的猪 | 来源:发表于2020-03-24 14:10 被阅读0次

题目描述

给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。

示例

示例 1:

输入: [1,2,1,3,2,5]
输出: [3,5]

注意:

  • 结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。
  • 你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?

解答方法

方法一:哈希表

思路

建立一个值到频率的映射关系的哈希表,返回频率为 1 的数字。

代码

class Solution:
    def singleNumber(self, nums: List[int]) -> List[int]:
        dic = collections.Counter(nums)
        res = []
        for i in dic:
            if dic[i] == 1:
                res.append(i)
        return res

时间复杂度

O(n)

空间复杂度

O(n),哈希表所使用的空间。

方法二:位运算

思路

参考https://leetcode-cn.com/problems/single-number-iii/solution/zhi-chu-xian-yi-ci-de-shu-zi-iii-by-leetcode/

代码

class Solution:
    def singleNumber(self, nums: List[int]) -> List[int]:
        tmp = 0
        for num in nums:
            tmp ^= num
        diff = tmp &(-tmp)

        x = 0
        for num in nums:
            if num & diff:
                x ^= num
        return [x, tmp ^ x]

时间复杂度

O(n)

空间复杂度

O(1)

相关文章

网友评论

      本文标题:Leetcode_260_只出现一次的数字Ⅲ_hn

      本文链接:https://www.haomeiwen.com/subject/zfniyhtx.html