1. 程式人生 > 實用技巧 >[程式設計題] lk [面試題 16.25. LRU快取]

[程式設計題] lk [面試題 16.25. LRU快取]

[程式設計題] 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);
 */