設計乙個資源池,以下三個操作滿足o(1)複雜度:(1)從未分配的資源中分配一塊資源;(2)從已分配的資源中釋放指定資源;(3)隨機訪問一塊已分配的資源。大致意思是這樣。
class resourcepool:
def __init__(self, cap):
self.rc = [i+1 for i in range(cap)]
self.rc[cap-1] = none
self.free = 0
self.allocated = -1
def alloc(self):
rc = none
if self.free is none:
return none
rc = self.free
self.free = self.rc[self.free]
return rc
def release(self, i):
self.rc[i] = self.free
self.free = i
def __str__(self):
return str(self.rc) + "free:" + str(self.free)
if __name__ == "__main__":
rp = resourcepool(10)
print(rp)
for i in range(5):
print(rp.alloc())
print(rp)
for i in range(0, 5, 2):
rp.release(i)
print(rp)
實現乙個 O 1 查詢的 LRU Cache
簡單來說 lru 是記憶體管理的一種演算法,淘汰最近不用的頁。o 1 時間完成查詢,那除了 hash 別無選擇。lru 用雙向鍊錶實現即可。資料結構選擇好了,查詢我們用 hash 通過 key 得到鍊錶節點的位置,然後更新 lru 鍊錶即可。簡單說下自己的專案,乙個類似 memcache 的小型資料...
設計乙個佇列能夠在O 1 取得佇列的最大值
問題 設計乙個佇列能夠在o 1 時間內取得佇列的最大值 include include include o 1 的速度取出棧中的最大值 templateclass maxstack else if value max element top 返回棧頂元素 t top 出棧 void pop data...
實現乙個在O 1 內提供min操作的棧
題目 正如本文題目所示,要求實現乙個除了push,pop之外,還提供乙個在o 1 時間內給出堆疊內最小的數值的操作。解析1 對於這個問題,我們可以從堆疊節點儲存的資訊入手。通常堆疊的節點只儲存乙個資料物件,為了能夠在o 1 的時間內找到堆疊內最小的值,我們可以在每個堆疊節點內儲存乙個min值,用於指...