class Node:
def __init__(self, key, val):
self.key = key
self.val = val
self.prev = None
self.next = None
class DoubleList:
def __init__(self):
# 頭指針、尾指針
self.head = Node(0, 0)
self.tail = Node(0, 0)
self.head.next = self.tail
self.tail.prev = self.head
self.lenSize = 0
# 尾插、頭出、任意刪
def add_last(self, x):
x.next = self.tail
x.prev = self.tail.prev
self.tail.prev.next = x
self.tail.prev = x
self.lenSize += 1
def pop_head(self):
if self.lenSize > 0:
tmp = self.head.next
self.remove_anywhere(tmp)
return tmp
def remove_anywhere(self, x):
x.prev.next = x.next
x.next.prev = x.prev
self.lenSize -= 1
def get_size(self):
return self.lenSize
class LRU:
def __init__(self, cap):
self.map = {}
self.cache = DoubleList()
# 最大容量
self.cap = cap
def get(self, key):
if key in self.map:
self.make_recently(key)
return self.map[key].val
else:
return -1
def put(self, key, val):
if key in self.map:
self.remove(key)
self.add_recently(key, val)
return
if self.cache.lenSize == self.cap:
self.remove_least_used()
self.add_recently(key, val)
# 對(duì)手機(jī)后臺(tái)的操作
# 1. 打開(kāi)新應(yīng)用
def add_recently(self, key, val):
node = Node(key, val)
node.prev = self.cache.tail.prev
self.cache.tail.prev.next = node
self.cache.tail.prev = node
node.next = self.cache.tail
# 放進(jìn)map
self.map[key] = node
# 2. 打開(kāi)后臺(tái)應(yīng)用
def make_recently(self, key):
node = self.map[key]
self.cache.remove_anywhere(node)
self.cache.add_last(node)
# 3. 劃掉后臺(tái)應(yīng)用
def remove(self, key):
node = self.map[key]
self.cache.remove_anywhere(node)
self.map.pop(key)
# 4. 殺后臺(tái)
def remove_least_used(self):
tmp = self.cache.pop_head()
self.map.pop(tmp.key)
2021-08-01 手撕LRU
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 中原焦點(diǎn)團(tuán)隊(duì)網(wǎng)中27莧華堅(jiān)持分享第132天2021.8.1咨詢(xún)、約練分享第6天 7月27日5:30分 咨詢(xún)師 上周...
- 你知道的越多,你不知道的越多 點(diǎn)贊再看,養(yǎng)成習(xí)慣 本文 GitHub https://github.com/Ja...
- 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂(lè)有人憂(yōu)愁,有人驚喜有人失落,有的覺(jué)得收獲滿(mǎn)滿(mǎn)有...