解题思路:利用LinkedHashMap这种数据结构。
import java.util.*;
public class Solution {
/**
* lru design
* @param operators int整型二维数组 the ops
* @param k int整型 the k
* @return int整型一维数组
*/
public int[] LRU (int[][] operators, int k) {
// write code here
LinkedHashMap<Integer, Integer> map = new LinkedHashMap<>();
List<Integer> res = new ArrayList<>();
for(int i = 0; i < operators.length; i++){
int ops = operators[i][0];
int key = operators[i][1];
//set
if(ops == 1){
int value = operators[i][2];
//如果存在,则表示需要覆盖(先删除,然后再添加至尾部)
if(map.containsKey(key)){
map.remove(key);
map.put(key, value);
}
//缓冲已满,移除最头部的元素,再追加至尾部
else if(map.size() >= k){
map.remove(map.keySet().toArray()[0]);
map.put(key, value);
}
//直接添加在最后面即可
else{
map.put(key, value);
}
}
//表示get操作
else if(ops == 2){
//先获得值,从链表中删除,再重新添加至链表尾部
if(map.containsKey(key)){
int value = map.get(key);
res.add(value);
map.remove(key);
map.put(key, value);
}
else{
res.add(-1);//少了这里的一块
}
}
}
int[] arr = new int[res.size()];
for(int i = 0; i < arr.length; i++){
arr[i] = res.get(i);
}
return arr;
}
}