假设我们有一个称为单元格的数字列表;此列表表示不同单元格的大小。现在,在每次迭代中,两个最大的像元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