原题连接:https://leetcode.com/problems/lru-cache/
思路1:
用到两个数据结构:Map和List,由于原题中对时间复杂度有所限制O(1),因此我们借用Map结构达到该时间复杂度要求。
但由于LRU有具体容量的限制,在最近最少使用规则下,当达到最大容量限制时,该删掉哪一个元素则需要借用List进行确定。
思路2:LinkedHashMap accessOrder为 true: 访问为时间顺序 / false:插入顺序排序
参考代码如下(Accepted):
class LRUCache {
int capacity = 0;
HashMap<String, Integer> map;
ArrayList<String> list;public LRUCache(int capacity) {
this.capacity = capacity;
this.map = new HashMap();
this.list = new ArrayList();
}
//读取
public int get(int key) {
if (!map.containsKey(String.valueOf(key))) {
return -1;
} else {
int result = map.get(String.valueOf(key));
putToStart(key, map.get(String.valueOf(key)));
return result;
}
}
//添加
public void put(int key, int value) {
map.put(String.valueOf(key), value);
putToStart(key, value);
}public void putToStart(int key, int value) {
list.remove(String.valueOf(key));
list.add(0, String.valueOf(key));if (list.size() > capacity) {
map.remove(list.get(list.size() - 1));
list.remove(list.size() - 1);
}
}
}