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

相关文章