//先吐槽一下题目,就我所以为出现的问题.
//对于那种get的key不存在或者get的key被移除了缓存队列,我们应不应该在这一次get里将其加入到缓存中。
//按理说是应该的,即使你不存在我也应该在缓存里面存一下,你说key不存在返回-1我能理解,
//但是要是因为它只是被移除了缓存队列但是key是存在的,应该是要把它放到缓存队列里面的。
//我的解法很low,仅仅是为了构造答案而做题,并没有用到LRU的队列,实际上的取值和插入值都是在hashmap上完成的。队列仅仅提供了辅助的作用。
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
LinkedList<Integer> list=new LinkedList<>();
HashMap<Integer,Integer> map=new HashMap<>();
int res[] =new int[102400];
int st=0;
for(int i=0;i<operators.length;i++){
if(operators[i][0]==1){
for(int j=0;j<list.size();j++){
if(list.get(j)==operators[i][1]){
list.remove(j);
map.remove(operators[i][1]);
break;
}
}
map.put(operators[i][1],operators[i][2]);
if(list.size()==k){
map.remove( list.removeLast());
}
list.addFirst(operators[i][1]);
}else{
if(map.get(operators[i][1])!=null){
res[st++]=map.get(operators[i][1]);
for(int j=0;j<list.size();j++){
if(list.get(j)==operators[i][1]){
list.remove(j);
break;
}
}
if(list.size()==k){
map.remove( list.removeLast());
}
list.addFirst(operators[i][1]);
}else{
res[st++]=-1;
}
}
}
int ans[]=new int[st];
for(int i=0;i<st;i++){
ans[i]=res[i];
}
return ans;
}
}