LRU缓存 Leecode 146题
牛客网地址
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) {
// 初始大小,0.75是装载因子,true是表示按照访问时间排序,k为初始容量
HashMap<Integer,Integer> map = new LinkedHashMap<>(k+1,0.75f,true);
ArrayList<Integer> arr = new ArrayList<>();
for(int[] set: operators){
int opt = set[0];
if(opt==1){
int key = set[1];
int value = set[2];
map.put(key,value);
//如果map里面的元素个数大于了缓存最大容量,则删除链表的顶端元素
if(map.size()> k){
Iterator it = map.keySet().iterator();
map.remove(it.next());
}
}
if(opt==2){
int key = set[1];
if(!map.containsKey(key)) arr.add(-1);
else{
int value = map.get(key);
arr.add(value);
}
}
}
int[] res = new int[arr.size()];
for(int i = 0;i<arr.size();i++){
res[i] = arr.get(i);
}
return res;
}
}