[程式設計題] lk [面試題 16.25. LRU快取]
阿新 • • 發佈:2020-08-01
[程式設計題] lk 面試題 16.25. LRU快取
基礎
LRU:
![image-20200801150626694]([程式設計題] lk [股票類買賣問題(多個情況)--動態規劃問題的綜合提升].assets/image-20200801150626694.png)
LFU:
![image-20200801150845474]([程式設計題] lk [股票類買賣問題(多個情況)--動態規劃問題的綜合提升].assets/image-20200801150845474.png)
題目
![image-20200801155241592]([程式設計題] lk [股票類買賣問題(多個情況)--動態規劃問題的綜合提升].assets/image-20200801155241592.png)
輸入輸出
![image-20200801155259450]([程式設計題] lk [股票類買賣問題(多個情況)--動態規劃問題的綜合提升].assets/image-20200801155259450.png)
程式碼
import java.util.*; class LRUCache { int capacity; LinkedHashMap<Integer,Integer> map; public LRUCache(int capacity) { this.capacity = capacity; this.map = new LinkedHashMap<>(); } public int get(int key) { if(!map.containsKey(key)){ return -1;//不存在 }else{ //先刪除再放到最後 Integer value = map.remove(key); //刪除舊的位置是會返回刪除結果的 map.put(key, value); //放入到最新的位置 return value; } } public void put(int key, int value) { if(map.containsKey(key)){ //先移除,再放最後 Integer values = map.remove(key); map.put(key, value); return; } //先判斷是否已滿,如果滿就把map的size大於容量了就去掉頭 if(map.size()>= capacity){ map.remove(map.keySet().iterator().next()); } //再次加入, map.put(key, value); } } /** * Your LRUCache object will be instantiated and called as such: * LRUCache obj = new LRUCache(capacity); * int param_1 = obj.get(key); * obj.put(key,value); */