Python中的单数II
假设我们有一个非空的整数数组,每个元素出现3次,除了一次,它恰好出现一次。我们必须找到一个元素。因此,如果数组为[2,2,3,2],则输出为3。
为了解决这个问题,我们将遵循以下步骤-
通过从数组中获取元素的绝对值来找到最大值,并将其存储到max_num中
max_bits:=(logmax_num以2为底的整数)+2
list1:=一个大小为max_bits且元素为0的空列表
对于以num为单位的每个num-
如果否为奇数,则将list1[pos]加1
n:=n/2并增加pos1
位置:=0
而num不为0并且pos<max_bit
对于我在0到max_bits范围内
list1[i]:=list1[i]mod3
pos:=0,res:=0
对于我在max_bits范围内
如果list1[i]不为0,则结果:=结果+2^pos
pos:=pos+1
如果list1[max_bits-1]为1,则res:=-(2^max_bits-res)
返回资源
范例(Python)
让我们看下面的实现以更好地理解-
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