题解 | #设计LFU缓存结构#

设计LFU缓存结构

http://www.nowcoder.com/practice/93aacb4a887b46d897b00823f30bfea1

import java.util.*;


public class Solution {
    /**
     * lfu design
     * @param operators int整型二维数组 ops
     * @param k int整型 the k
     * @return int整型一维数组
     */
    HashMap<Integer,Integer> vCnt = new LinkedHashMap<Integer,Integer>();
    HashMap<Integer,Integer> map = new LinkedHashMap<Integer,Integer>();
    int k;
    int min = 1;
    public int[] LFU (int[][] operators, int k) {
        this.k = k;
        int resSize = 0;
        for (int i = 0; i < operators.length; i++) {
            if (operators[i][0] == 2) {
                resSize++;
            }
        }
        int len = operators.length;
        int[] res = new int[resSize];
        int j = 0;
        for(int i = 0;i<len;i++){
            int shu = operators[i][0];
            if(shu == 1){
                set(operators[i][1],operators[i][2]);
            }else{
                res[j++] = get(operators[i][1]);
            }
        }
        return res;
    }
    int cnt = 0;
  //添加元素
    void set(int key, int value){
        if(cnt<k){
            vCnt.put(key,vCnt.getOrDefault(key,0)+1);
            map.put(key,value);
            cnt++;
        }else{
            map.remove(getMinKey());
            vCnt.remove(getMinKey());
            vCnt.put(key,vCnt.getOrDefault(key,0)+1);
            map.put(key,value);
        }
    }
  //查找元素
    int  get(int key){         
        if(map.containsKey(key)){
            int val1=vCnt.get(key);
            vCnt.remove((Integer)key);
            vCnt.put(key,val1+1);
            return map.get(key);
        } 
        else return -1;
    }
  //找出最小的数
    public int getMinKey(){
        int min  = Integer.MAX_VALUE;
        int key = -1;
        for(Map.Entry<Integer, Integer> e:vCnt.entrySet()){
            if(e.getValue()<min){
                min = e.getValue();
                key = e.getKey();
            }
        }
        return key;
    }
}
全部评论

相关推荐

11-09 01:22
已编辑
东南大学 Java
高级特工穿山甲:羡慕,我秋招有家企业在茶馆组织线下面试,约我过去“喝茶详谈”😢结果我去了发现原来是人家喝茶我看着
点赞 评论 收藏
分享
10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务