日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LRU LeetCode

發布時間:2024/1/23 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

class LRUCache(collections.OrderedDict): def __init__(self, capacity: int): super().__init__() self.capacity = capacity def get(self, key: int) -> int: if key not in self: return -1 self.move_to_end(key) return self[key] def put(self, key: int, value: int) -> None: if key in self: self.move_to_end(key) self[key] = value if len(self) > self.capacity: self.popitem(last=False)

2、Java

class LRUCache extends LinkedHashMap<Integer, Integer>{ private int capacity; public LRUCache(int capacity) { super(capacity, 0.75F, true); this.capacity = capacity; } public int get(int key) { return super.getOrDefault(key, -1); } public void put(int key, int value) { super.put(key, value); } @Override protected boolean removeEldestEntry(Map.Entry<Integer, Integer> eldest) { return size() > capacity; }}

三、復雜度分析

時間復雜度:對于 put 和 get 都是 O(1)。

空間復雜度:O(capacity),因為哈希表和雙向鏈表最多存儲 capacity+1 個元素。

總結

以上是生活随笔為你收集整理的LRU LeetCode的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。