题解 | 数组中只出现一次的两个数字---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]