Python中的细胞融合

假设我们有一个称为单元格的数字列表;此列表表示不同单元格的大小。现在,在每次迭代中,两个最大的像元a和b根据以下规则进行交互:因此,如果a = b,它们都会死亡。否则,两个单元格合并,并且其大小变为((a + b)/ 3)的下限。我们必须找到最后一个像元的大小,如果没有剩余像元,则返回-1。

因此,如果输入类似于[20,40,40,30],则输出将为16,在第一次迭代中,40和40将消失,然后20和30变为((20 + 30)/ 3)的下限=底数50/3 = 16

为了解决这个问题,我们将遵循以下步骤-

  • 单元格:=转换单元格数组负的每个值

  • 与细胞堆在一起

  • 当单元格不为空时,请-

    • 从单元格中删除两个元素,然后再次将它们转换为负数,并将它们依次分配为第一和第二

  • 如果第一个不等于第二个,则-

    • 将(first + second)/ 3)的底数的负数插入堆中

  • 如果单元格中包含某些元素,则返回cell [0]的负数-1

让我们看下面的实现以更好地理解-

示例

from heapq import heapify, heappop, heappush
class Solution:
   def solve(self, cells):
      cells=[-x for x in cells]
      heapify(cells)
      while len(cells)>1:
         first,second = -heappop(cells), -heappop(cells)
         if first!=second:
            heappush(cells, -((first+second)//3))
      return -cells[0] if cells else -1
ob = Solution()cells = [20,40,40,30]
print(ob.solve(cells))

输入项

[20,40,40,30]

输出结果

16