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