Python 中的单个数字 II
pythonserver side programmingprogramming更新于 2023/10/8 3:50:00
假设我们有一个非空的整数数组,除了一个元素只出现一次外,每个元素都出现了三次。我们必须找到一个元素。因此,如果数组为 [2,2,3,2],则输出将为 3。
为了解决这个问题,我们将遵循以下步骤 −
通过从数组中取元素的绝对值来找到最大数字并将其存储到 max_num 中
max_bits := (log max_num base 2) + 2 的整数
list1 := 一个大小为 max_bits 且元素为 0 的空列表
对于 nums 中的每个数字 −
pos := 0
当 num 不为 0 且 pos < max_bit
如果 no 为奇数,则将 list1[pos] 增加 1
n := n / 2 并将 pos 增加 1
对于 i,范围为 0 到 max_bits
list1[i] := list1[i] mod 3
pos := 0, res := 0
对于 i,范围为 max_bits
如果 list1[i] 不为 0,则 result := result + 2^pos
pos := pos + 1
如果 list1[max_bits - 1] 为 1,则 res := -(2^max_bits - res)
返回 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