题解 | #设计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; } }