classlistnode
} class
hlistnode
public
int get(int
key, listnode no)
else
}return -1;
}public
void
delnode(listnode node)
else
else
if (node.next != null
) else
len--;
node.next = null
; node.pre = null
; }
}public
void
addnodebeforehead(listnode node)
if (head == null
) else
}public
void addbeforehead(int key, int
val)
else
len++;
}public listnode ishaskey(int
key)
else
}return
null
; }
public
void
delaftertail()
else
else}}
}public
class
lrucache
/** @param key: an integer
* @return: an integer
*/public
int get(int
key)
return
val;
}/** @param key: an integer
* @param value: an integer
* @return: nothing
*/public
void set(int key, int
value)
if (hnode.len >=capacity)
hnode.addbeforehead(key ,value);
}}
lru規則簡介:
總容量有限,插入時發現已經有這個key了,就需要把這個key value更新,並且放到最前面。 如果發現容量滿了,那麼就刪除最後的元素。
每次讀取某乙個元素之後就把該元素挪到最前面。
我的思路:
基礎資料結構是雙端鍊錶
然後新建乙個資料結構,裡面有head tail分別指向雙端鍊錶的頭和尾,len用來表示這個鍊錶的長度,然後寫一些這個資料結構增刪改查的api,就簡單了。
LRU快取策略
為最近最少使用 lru 快取策略設計乙個資料結構,它應該支援以下操作 獲取資料 get 和寫入資料 set 獲取資料get key 如果快取中存在key,則獲取其資料值 通常是正數 否則返回 1。寫入資料set key,value 如果key還沒有在快取中,則寫入其資料值。當快取達到上限,它應該在寫...
134 LRU快取策略
為最近最少使用 lru 快取 策略設計乙個資料結構,它應該支援以下操作 獲取資料 get 和寫入資料 set 獲取資料get key 如果快取中存在key,則獲取其資料值 通常是正數 否則返回 1。寫入資料set key,value 如果key還沒有在快取中,則寫入其資料值。當快取達到上限,它應該在...
快取策略之LRU和LFU
快取,就是把資料儲存在本地,簡單實用key value做乙個對映就好了。但為什麼還要快取策略,因為快取的大小需要限制,否則儲存的東西只增不減,時間一長就有很多記憶體浪費。因為資源總是有限,所以優化,因為優化所以複雜 這個是least recently used的縮寫,即最近最少使用。它的邏輯很簡單 ...