题解 | #设计LRU缓存结构#
设计LRU缓存结构
http://www.nowcoder.com/practice/e3769a5f49894d49b871c09cadd13a61
import java.util.*;
import java.util.LinkedList;
import java.util.Queue;
public class Solution {
Map<Integer, Integer> map = new HashMap<>();
int resIndex = 0;
Queue<Integer> key = new LinkedList<Integer>();
/**
* lru design
* @param operators int整型二维数组 the ops
* @param k int整型 the k
* @return int整型一维数组
*/
public int[] LRU (int[][] operators, int k) {
// write code here
int len = (int)Arrays.stream(operators).filter(x -> x[0] == 2).count();
int[] res = new int[len];
for(int i = 0; i < operators.length; i++) {
if(operators[i][0] == 1){
MapSet(operators[i][1], operators[i][2], k);
}
else { // 2
res[resIndex] = MapGet(operators[i][1], k);
resIndex++;
}
}
return res;
}
public void MapSet(int k, int v, int sum) {
map.put(k,v);
key.offer(k);
// 大小超限,从map中移出队列头即最不常用的Key对应的值
if(map.size() > sum) {
int head = key.poll();
map.remove(head);
}
}
public int MapGet(int k, int sum) {
if(map.containsKey(k)){
if(key.contains(k)){
key.remove(k);
}
key.offer(k);
return map.get(k);
}
return -1;
}
}