LeetCode146 LRU快取機制

2021-10-06 11:16:22 字數 1459 閱讀 6460

運用你所掌握的資料結構,設計和實現乙個 lru (最近最少使用) 快取機制。它應該支援以下操作: 獲取資料 get 和 寫入資料 put 。

獲取資料 get(key) - 如果金鑰 (key) 存在於快取中,則獲取金鑰的值(總是正數),否則返回 -1。

寫入資料 put(key, value) - 如果金鑰已經存在,則變更其資料值;如果金鑰不存在,則插入該組「金鑰/資料值」。當快取容量達到上限時,它應該在寫入新資料之前刪除最久未使用的資料值,從而為新的資料值留出空間。鏈結

一開始想的是雙端佇列+map,雖然能ac,但是耗時有點多。。

class

lrucache

public

intget

(int key)

else

}public

void

put(

int key,

int value)

deque.

offerfirst

(key);}

else

map.

put(key,value);}

}

看了看題解,這個map用得好,先造個雙向鍊錶,然後存map

class

lrucache

public

lrunode

(int k,

int v)

}private map

map=

newhashmap

<

>()

;private

int cap;

private

int size;

//新增'工具節點'頭尾,方便在鍊錶首尾操作

private lrunode head;

private lrunode tail;

public

lrucache

(int capacity)

public

intget

(int key)

removetohead

(get)

;return get.val;

}public

void

put(

int key,

int value)

else}}

private

void

addtohead

(lrunode node)

private

void

removenode

(lrunode node)

private

void

removetohead

(lrunode node)

private

void

removetail()

}

學渣帶你刷Leetcode146 LRU快取機制

運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料 get 和 寫入資料 put 獲取資料 get key 如果金鑰 key 存在於快取中,則獲取金鑰的值 總是正數 否則返回 1。寫入資料 put key,value 如果金鑰已經存在,則變更其資料值...

leetcode146 LRU快取機制

運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料 get 和 寫入資料 put 獲取資料 get key 如果金鑰 key 存在於快取中,則獲取金鑰的值 總是正數 否則返回 1。寫入資料 put key,value 如果金鑰不存在,則寫入其資料值。...

LeetCode 146 LRU快取機制

運用你所掌握的資料結構,設計和實現乙個 lru 最近最少使用 快取機制。它應該支援以下操作 獲取資料get和 寫入資料put。獲取資料get key 如果金鑰 key 存在於快取中,則獲取金鑰的值 總是正數 否則返回 1。寫入資料put key,value 如果金鑰不存在,則寫入其資料值。當快取容量...