【剑指Offer】JZ56 数组中只出现一次的两个数字

JZ56 数组中只出现一次的两个数字

描述
 一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。

要求:空间复杂度 O(1),时间复杂度 O(n)

提示:输出时按非降序排列。

输入:
[1,4,1,6]
返回值:
[4,6]
说明:
返回的结果中较小的数排在前面

输入:
[1,2,3,3,2,9]
返回值:
[1,9]

# @param array int整型一维数组 
# @return int整型一维数组
# 
from typing import List
class Solution:
    def FindNumsAppearOnce(self , array: List[int]) -> List[int]:
        # write code here
        # 哈希去重
        res = []
        dict = {}
        i = 0
        l = len(array)
        while i < l:
           dict[array[i]] = dict[array[i]]+1 if array[i] in dict else 1
           i = i + 1
        for j in dict:
            if dict[j] == 1:
                res.append(j)

        if res[0] > res[1]:
            tmp = res[0]
            res[0] = res[1]
            res[1] = tmp
        return res


a = [1,4,1,6]
b = Solution()
r = b.FindNumsAppearOnce(a)
print(r)
posted @ 2022-08-01 15:43  一半丶  阅读(17)  评论(0编辑  收藏  举报