高階篇 設計乙個O(1)的資源池

2021-10-03 16:09:40 字數 838 閱讀 1973

設計乙個資源池,以下三個操作滿足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值,用於指...