演算法第三題(LRU)

2021-10-07 04:56:40 字數 2247 閱讀 7796

class

dlinkednode

:def

__init__

(self, key=

0, value=0)

: self.key = key

self.value = value

self.prev =

none

self.

next

=none

class

lrucache

:def

__init__

(self, capacity:

int)

: self.cache =

dict()

# 使用偽頭部和偽尾部節點

self.head = dlinkednode(

) self.tail = dlinkednode(

) self.head.

next

= self.tail

self.tail.prev = self.head

self.capacity = capacity

self.size =

0def

get(self, key:

int)

->

int:

if key not

in self.cache:

return-1

# 如果 key 存在,先通過雜湊表定位,再移到頭部

node = self.cache[key]

self.movetohead(node)

return node.value

defput(self, key:

int, value:

int)

->

none

:if key not

in self.cache:

# 如果 key 不存在,建立乙個新的節點

node = dlinkednode(key, value)

# 新增進雜湊表

self.cache[key]

= node

# 新增至雙向鍊錶的頭部

self.addtohead(node)

self.size +=

1if self.size > self.capacity:

# 如果超出容量,刪除雙向鍊錶的尾部節點

removed = self.removetail(

)# 刪除雜湊表中對應的項

self.cache.pop(removed.key)

self.size -=

1else

:# 如果 key 存在,先通過雜湊表定位,再修改 value,並移到頭部

node = self.cache[key]

node.value = value

self.movetohead(node)

defaddtohead

(self, node)

: node.prev = self.head

node.

next

= self.head.

next

self.head.

next

.prev = node

self.head.

next

= node

defremovenode

(self, node)

: node.prev.

next

= node.

next

node.

next

.prev = node.prev

defmovetohead

(self, node)

: self.removenode(node)

self.addtohead(node)

defremovetail

(self)

: node = self.tail.prev

self.removenode(node)

return node

lru(最近最少使用演算法) 146 leetcode

實現雜湊表加雙向鍊錶

雜湊表儲存key與key指向的node,目的能夠o(1)的查詢

雙向鍊錶儲存位置資訊,最早使用的放在最後,能夠o(1)的加入快取;當溢位的時候能夠o(1)的刪除節點

學習演算法第三題

問題 判斷整數是否是回文。ps 回文 把相同的詞彙或句子 在下文中調換位置或顛倒過來,產生首尾回環的情趣,叫做回文,也叫回環。要求 不能將整數轉化成字串!示例1 輸入 121 輸出 true 說明 從左到右,顯示121 從右到左,顯示121 因此為回文。示例2 輸入 121 輸出 false 說明 ...

leetcode演算法第三題

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 s abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 s bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 s pwwkew...

演算法打卡第三題(陣列 移除元素)

題目 解題思路 我認為這一題移除元素與我做的上一題刪除重複元素有異曲同工之妙,不同的是,題目已經給定了我們乙個val值,讓我們與陣列中的值一一比較,唯一的難點就是第乙個值如何移除,這裡我們同意需要定義乙個新的變數length表示新陣列的長度,賦length 0,這裡我們像上題賦length初值為1的...