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

}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务