Python 中的細胞融合


假設我們有一個名為 cells 的數字列表;此列表表示不同細胞的大小。現在,在每次迭代中,兩個最大的細胞 a 和 b 根據以下規則進行互動:因此,如果 a = b,則它們都會死亡。否則,這兩個細胞合併,它們的大小變為 ((a + b) / 3) 的向下取整。我們必須找到最後一個細胞的大小,或者如果剩餘的細胞不存在,則返回 -1。

因此,如果輸入類似於 [20,40,40,30],則輸出將為 16,在第一次迭代中,40 和 40 將死亡,然後 20 和 30 變為 ((20+30) / 3) 的向下取整 = 50/3 的向下取整 = 16

為了解決這個問題,我們將遵循以下步驟:

  • cells := 將 cells 陣列的每個值轉換為負數

  • 使用 cells 建立一個堆

  • 當 cells 不為空時,執行以下操作:

    • 從 cells 中刪除兩個元素,並將它們再次轉換為負數,並依次將它們賦值為 first 和 second

  • 如果 first 不等於 second,則:

    • 將 (first+second)/3 的負數向下取整插入堆中

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

更新於:2020 年 9 月 2 日

166 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.