leetcode--146--LRU緩存機(jī)制

題目:
運(yùn)用你所掌握的數(shù)據(jù)結(jié)構(gòu)猿推,設(shè)計和實(shí)現(xiàn)一個 LRU (最近最少使用) 緩存機(jī)制。它應(yīng)該支持以下操作: 獲取數(shù)據(jù) get 和 寫入數(shù)據(jù) put 。

獲取數(shù)據(jù) get(key) - 如果密鑰 (key) 存在于緩存中,則獲取密鑰的值(總是正數(shù))务唐,否則返回 -1。
寫入數(shù)據(jù) put(key, value) - 如果密鑰不存在灼卢,則寫入其數(shù)據(jù)值绍哎。當(dāng)緩存容量達(dá)到上限時,它應(yīng)該在寫入新數(shù)據(jù)之前刪除最久未使用的數(shù)據(jù)值鞋真,從而為新的數(shù)據(jù)值留出空間崇堰。

進(jìn)階:

你是否可以在 O(1) 時間復(fù)雜度內(nèi)完成這兩種操作?

示例:

LRUCache cache = new LRUCache( 2 /* 緩存容量 */ );

cache.put(1, 1);
cache.put(2, 2);
cache.get(1);       // 返回  1
cache.put(3, 3);    // 該操作會使得密鑰 2 作廢
cache.get(2);       // 返回 -1 (未找到)
cache.put(4, 4);    // 該操作會使得密鑰 1 作廢
cache.get(1);       // 返回 -1 (未找到)
cache.get(3);       // 返回  3
cache.get(4);       // 返回  4

鏈接:https://leetcode-cn.com/problems/lru-cache

思路:
1、需要注意的是在get的時候?qū)⒁延械脑剡M(jìn)行刪除后重新設(shè)置海诲,從而使其在最新的位置上
2繁莹、python3中字典是有序的,python2中字典是無序的特幔,所以python2中寫的話需要設(shè)置有序字典

Python3代碼:

class LRUCache:

    def __init__(self, capacity: int):
        self.capacity = capacity
        self.cache = {}

    def get(self, key: int) -> int:
        if (key not in self.cache):
            return -1
        self.cache[key] = self.cache.pop(key)
        return self.cache[key]

    def put(self, key: int, value: int) -> None:
        if (key in self.cache):
            self.cache.pop(key)
        self.cache[key] = value
        if (len(self.cache)>self.capacity):
            first_item = list(self.cache)[0]
            self.cache.pop(first_item)


# Your LRUCache object will be instantiated and called as such:
# obj = LRUCache(capacity)
# param_1 = obj.get(key)
# obj.put(key,value)

Python2代碼:

import collections

class LRUCache(object):

    def __init__(self, capacity):
        """
        :type capacity: int
        """
        self.capacity = capacity
        self.cache = collections.OrderedDict()


    def get(self, key):
        """
        :type key: int
        :rtype: int
        """
        if key not in self.cache:
            return -1
        value = self.cache.pop(key)
        self.cache[key] = value
        return self.cache[key]

    def put(self, key, value):
        """
        :type key: int
        :type value: int
        :rtype: None
        """
        if key in self.cache:
            self.cache.pop(key)
        self.cache[key] = value
        if len(self.cache) > self.capacity:
            x = list(self.cache)[0]
            self.cache.pop(x)
        

# Your LRUCache object will be instantiated and called as such:
# obj = LRUCache(capacity)
# param_1 = obj.get(key)
# obj.put(key,value)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末咨演,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蚯斯,更是在濱河造成了極大的恐慌薄风,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拍嵌,死亡現(xiàn)場離奇詭異遭赂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)横辆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門撇他,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人狈蚤,你說我怎么就攤上這事困肩。” “怎么了脆侮?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵锌畸,是天一觀的道長。 經(jīng)常有香客問我靖避,道長蹋绽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任筋蓖,我火速辦了婚禮,結(jié)果婚禮上退敦,老公的妹妹穿的比我還像新娘粘咖。我一直安慰自己,他們只是感情好侈百,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布瓮下。 她就那樣靜靜地躺著,像睡著了一般钝域。 火紅的嫁衣襯著肌膚如雪讽坏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天例证,我揣著相機(jī)與錄音路呜,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛胀葱,可吹牛的內(nèi)容都是我干的漠秋。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼抵屿,長吁一口氣:“原來是場噩夢啊……” “哼庆锦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起轧葛,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤搂抒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后尿扯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體求晶,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年姜胖,在試婚紗的時候發(fā)現(xiàn)自己被綠了誉帅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡右莱,死狀恐怖蚜锨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情慢蜓,我是刑警寧澤亚再,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站晨抡,受9級特大地震影響氛悬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耘柱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一如捅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧调煎,春花似錦镜遣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至娄柳,卻和暖如春寓辱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赤拒。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工秫筏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诱鞠,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓跳昼,卻偏偏與公主長得像般甲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鹅颊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 本題考察的LRU緩存機(jī)制,HashMap和鏈表 題目描述 運(yùn)用你所掌握的數(shù)據(jù)結(jié)構(gòu)敷存,設(shè)計和實(shí)現(xiàn)一個 LRU (最近...
    小怪獸大作戰(zhàn)閱讀 2,013評論 0 3
  • 題目 運(yùn)用你所掌握的數(shù)據(jù)結(jié)構(gòu),設(shè)計和實(shí)現(xiàn)一個 LRU (最近最少使用) 緩存機(jī)制堪伍。它應(yīng)該支持以下操作: 獲取數(shù)據(jù)...
    多彩海洋閱讀 270評論 1 1
  • 代碼(Python3):題目描述: 實(shí)現(xiàn)LRU(最近最少使用)緩存機(jī)制,即一個數(shù)據(jù)結(jié)構(gòu).當(dāng)緩存的容量達(dá)到上線時,刪...
    _xuyue閱讀 149評論 0 1
  • 146. LRU緩存機(jī)制 Python3 實(shí)現(xiàn) LRU(最近最少使用) 緩存機(jī)制 更多可參見:https://en...
    leacoder閱讀 478評論 0 1
  • 手機(jī)飛行模式锚烦,和自己在一起的時光! 一帝雇,健康 早睡早起早餐基本完成涮俄,偶有一夜晚睡第二日昏睡,感覺浪費(fèi)了時光尸闸,好吧彻亲,...
    aromawang閱讀 219評論 0 2