标签:sla ber 利用 self 时间复杂度 als 通过 single amp
nums
里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1:
输入:nums = [4,1,4,6]
输出:[1,6] 或 [6,1]
示例 2:
输入:nums = [1,2,10,4,1,4,3,3]
输出:[2,10] 或 [10,2]
class Solution:
def singleNumbers(self, nums: List[int]) -> List[int]:
#一个数和0异或是其本身,和本身异或为0
n1,n2=0,0
#(1)计算整个数组的异或值
xor_num=0
for num in nums:
xor_num^=num
#(2)寻找xor_num从右数第一个为1的位置
mask=1
while xor_num&mask==0:
mask<<=1
#(3)分组求解两个只出现一次的数字n1,n2
for num in nums:
if num&mask==0:
n1^=num
else:
n2^=num
return [n1,n2]
标签:sla ber 利用 self 时间复杂度 als 通过 single amp
原文地址:https://www.cnblogs.com/USTC-ZCC/p/12466180.html