题解 | 数组中只出现一次的两个数字---leetcode136

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

https://www.nowcoder.com/practice/389fc1c3d3be4479a154f63f495abff8

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param nums int整型一维数组 
# @return int整型一维数组
#
class Solution:

    """
    解题思路:
    1.dict() 保存每个数字出现的次数
    2.遍历dict() 为1的加入结果中

    """
    def FindNumsAppearOnce1(self , nums: List[int]) -> List[int]:
        # write code here
        res=[]
        if not nums or len(nums)==1:
            return []
        mp=dict()
        n=len(nums)
        for i in range(n):
            if nums[i] not in mp:
                mp[nums[i]]=1
            else:
                mp[nums[i]]+=1
        #print(mp)
        key_list=mp.keys()
        for i in key_list:
            if mp[i]==1:
                res.append(i)
        #print(res)
        #res.sort() # 整理次序
        if res[0]>res[1]:
            temp=res[0]
            res[0]=res[1]
            res[1]=temp 
        return res
    def FindNumsAppearOnce(self , nums: List[int]) -> List[int]:
        # write code here
        res=[]
        if not nums or len(nums)==1:
            return []

        temp=0
        n=len(nums)
        # 遍历整个数组,将每个元素逐个异或运算,得到a异或b
        for i in range(n):
            temp ^=nums[i]
        # ste2:  找到k二进制第一个不相同的位 
        k=1
        while k&temp==0:
            k<<=1
        #step3 遍历属猪将数组单独做异或运算分别存在res1  res2

        #  step 4 比较res1和res2 保持递增顺序 返回
        res1=0
        res2=0
        for i in range(n):
            if k&nums[i]==0:
                res1^=nums[i]
            else:
                res2^=nums[i]
        if res1>res2:
            t=res1 
            res1=res2
            res2=t
        return [res1,res2]
        



全部评论

相关推荐

06-04 18:37
门头沟学院 Java
勇敢的ssr求对象:前面看的有点奔溃,看到只有你是真玩啊,忍不住笑出了声😂
点赞 评论 收藏
分享
04-17 18:32
门头沟学院 Java
野猪不是猪🐗:他跟你一个学校,你要是进来之后待遇比他好,他受得了?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务