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
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP