假设我们有一个非空的整数数组,每个元素出现3次,除了一次,它恰好出现一次。我们必须找到一个元素。因此,如果数组为[2,2,3,2],则输出为3。
为了解决这个问题,我们将遵循以下步骤-
通过从数组中获取元素的绝对值来找到最大值,并将其存储到max_num中
max_bits:=(log max_num以2为底的整数)+ 2
list1:=一个大小为max_bits且元素为0的空列表
对于以num为单位的每个num-
如果否为奇数,则将list1 [pos]加1
n:= n / 2并增加pos 1
位置:= 0
而num不为0并且pos <max_bit
对于我在0到max_bits范围内
list1 [i]:= list1 [i] mod 3
pos:= 0,res:= 0
对于我在max_bits范围内
如果list1 [i]不为0,则结果:=结果+ 2 ^ pos
pos:= pos + 1
如果list1 [max_bits-1]为1,则res:=-(2 ^ max_bits-res)
返回资源
让我们看下面的实现以更好地理解-
import math class Solution(object): def singleNumber(self, nums): max_num = max(map(abs, nums)) max_bits = (int)(math.log(max_num,2)) + 2 list1 = [0 for i in range(max_bits)] for no in nums: pos = 0 while (no != 0 and pos < max_bits): if (no & 1 != 0): list1[pos] += 1 no >>= 1 pos += 1 for i in range(max_bits): list1[i] %= 3 pos = 0 result = 0 for i in range(max_bits): if (list1[i] != 0): result += (2 ** pos) pos += 1 print (list1, max_bits) if (list1[max_bits - 1] == 1): result = -(2 ** max_bits - result) return (result) ob = Solution()print(ob.singleNumber([2,2,3,2]))
[2,2,3,2]
输出结果
[1, 1, 0] 3 3