Python 中的细胞融合

pythonserver side programmingprogramming更新于 2025/11/3 22:04:17

假设我们有一个称为细胞的数字列表;此列表表示不同细胞的大小。现在,在每次迭代中,两个最大的细胞 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) 的底数的负数插入堆中

  • 如果 cells[0] 有一些元素,则返回 cells[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

相关文章


有用资源