LRU LeetCode
一、題目描述
運用你所掌握的數據結構,設計和實現一個? LRU (最近最少使用) 緩存機制 。
實現 LRUCache 類:
LRUCache(int capacity) 以正整數作為容量 capacity 初始化 LRU 緩存
int get(int key) 如果關鍵字 key 存在于緩存中,則返回關鍵字的值,否則返回 -1 。
void put(int key, int value) 如果關鍵字已經存在,則變更其數據值;如果關鍵字不存在,則插入該組「關鍵字-值」。當緩存容量達到上限時,它應該在寫入新數據之前刪除最久未使用的數據值,從而為新的數據值留出空間。
進階:你是否可以在 O(1) 時間復雜度內完成這兩種操作?
提示:
1 <= capacity <= 3000
0 <= key <= 10000
0 <= value <= 105
最多調用 2 * 10^5 次 get 和 put
二、解題思路
實現本題的兩種操作,需要用到一個哈希表和一個雙向鏈表。在 Python 語言中,有一種結合了哈希表與雙向鏈表的數據結構 OrderedDict,只需要短短的幾行代碼就可以完成本題。
在 Java 語言中,同樣有類似的數據結構
LinkedHashMap。
三、代碼
1、Python
2、Java
三、復雜度分析
時間復雜度:對于 put 和 get 都是 O(1)。
空間復雜度:O(capacity),因為哈希表和雙向鏈表最多存儲 capacity+1 個元素。
總結
以上是生活随笔為你收集整理的LRU LeetCode的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LRU算法及Java实现
- 下一篇: 商城计价中心 - 从容应对复杂场景价格计