题解 | #设计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;
    }
}
全部评论

相关推荐

但听说转正率很低,我现在有在实习了,好纠结要不要去
熬夜脱发码农:转正率低归低,但是实习的经历你可以拿着,又不是说秋招不准备了
点赞 评论 收藏
分享
06-12 17:46
门头沟学院 Java
运营你豪哥:来说重点: ​1.项目前置,时间倒序。​​ 2.​项目描述强化结果与量化效果(STAR原则里的R)。​​ ​3.个人技能精炼,明确掌握程度,突出核心。​​ ​4.增加强有力开头的个人总结部分。​​ 5.​优化教育背景(成绩排名)、合并奖项与活动。​​
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
白火同学:能。我当初应届沟通了1200,收简历50,面试10左右吧,加油投吧
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务