leetcode演算法 146 LRU快取機制

2021-10-07 12:05:07 字數 1622 閱讀 1545

方案:linkedhashmap

所有題目源**:git位址

題目

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

獲取資料 get

(key)

- 如果關鍵字 (key) 存在於快取中,則獲取關鍵字的值(總是正數),否則返回 -

1。寫入資料 put

(key, value)

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

高階:你是否可以在 o(1

) 時間複雜度內完成這兩種操作?

示例:lrucache cache =

newlrucache(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

方案:陣列解法
class

lrucache

row = capacity;

}public

intget

(int key)

else

if(cache[i][0

]==-1

)else

}return res;

}public

void

put(

int key,

int value)

else

if(cache[i][0

]==-1

&&!find)

else}}

if(index !=-1

)}}

複雜度計算

方案:linkedhashmap

class

lrucache

extends

linkedhashmap

public

intget

(int key)

public

void

put(

int key,

int value)

@override

protected

boolean

removeeldestentry

(map.entry

eldest)

}

複雜度計算

leetcode 146 實現LRU演算法

lru 最近最少使用。不管是讀還是寫,都是對此資料重新整理他的時間 時間由雙向鍊錶的順序決定 class lrucache public node int key,int value private node dummyhead new node private node dummytail new...

LeetCode146 動手實現LRU演算法

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

LeetCode146 動手實現LRU演算法

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