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

相关推荐

头像
01-29 18:11
海南大学 Java
奔跑的suechil...:单从项目看这个简历不怕被问穿吗 带微服务的项目需要相当多的项目理解和经验诶
点赞 评论 收藏
分享
2025-12-28 22:19
门头沟学院 Java
不敢追165女神:简历写得毫无特点,你说你要是大二或者大三找寒假实习到暑期实习这段时间,你的简历还能约到面试。但是你是研究生哥,面试官不会因为你是研究生而降低要求,反而会觉得你是研究生才学了这么一点?为什么我不找个同阶段的本科生?
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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