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

设计LRU缓存结构

http://www.nowcoder.com/practice/e3769a5f49894d49b871c09cadd13a61

定义一个LinkedHashMap来存取当前缓存里的key-value,遍历数组,如果第一位为1,且之后一位的key在map中没有,就把它加入到map当中,当key-value数量大于最大值k时移除第一个位置的key-value;
如果已经存在,将存在的key-value移除,添加当前key-value;如果第一位为2,为get操作,get找到了key就将其值加入定义的列表中,反之将-1加入列表中,之后将当前key-value移到最后进行下一步。数组遍历完,将
list里的值全部赋给结果数组返回
import java.util.*;


public class Solution {
    /**
     * lru design
     * @param operators int整型二维数组 the ops
     * @param k int整型 the k
     * @return int整型一维数组
     */
    public int[] LRU (int[][] operators, int k) {
        // write code here
         LinkedHashMap<Integer,Integer> map=new LinkedHashMap<>();
         List<Integer> list=new ArrayList<>();
         for(int[] op:operators){
             if(op[0]==1){
                 if(!map.containsKey(op[1])){
                     if(map.size()==k)
                         map.remove(map.keySet().iterator().next());
                     map.put(op[1],op[2]);
                 }else{
                     map.remove(op[1]);
                     map.put(op[1],op[2]);
                     
                 }
             }else if(op[0]==2){
                  if(map.containsKey(op[1])){
                      int val=map.get(op[1]);
                      list.add(val);
                      map.remove(op[1]);
                      map.put(op[1],val);
                  }
                  else{
                      list.add(-1);
                  }
             }
         }
        int[] res=new int[list.size()];
        for(int i=0;i<list.size();i++){
            res[i]=list.get(i);
        }
        return res;
    }
}


全部评论

相关推荐

来,说点可能被同行“骂”的大实话。🙊当初接数字马力Offer时,朋友都说:“蚂蚁的“内包”公司?你想清楚啊!”但入职快一年后的今天,我反而对他有了不一样的看法!🔹&nbsp;是偏见?还是信息差!之前没入职之前外面都在说什么岗位低人一等这类。实际上:这种情况不可至否,不能保证每个团队都是其乐融融。但我在的部门以及我了解的周边同事都还是十分好相处的~和蚂蚁师兄师姐之间也经常开一些小玩笑。总之:身份是蚂蚁公司给的,地位是自己挣的(一个傲娇女孩的自述)。🔹&nbsp;待遇?玩的就是真实!试用期工资全额发!六点下班跑得快(早9晚6或者早10晚7,动态打卡),公积金顶格交。别听那些画饼的,到手的钱和下班的时间才是真的(都是牛马何必难为牛马)。🔹&nbsp;能不能学到技术?来了就“后悔”!我们拥有权限直通蚂蚁知识库,技术栈多到学不完。说“学不到东西”的人,来了可能后悔——后悔来晚了(哈哈哈哈,可以不学但是不能没有)!💥&nbsp;内推地址:https://app.mokahr.com/su/ueoyhg❗我的内推码:NTA6Nvs走我的内推,可以直达业务部门,面试流程更快速,进度可查!今天新放HC,之前挂过也能再战!秋招已经正式开始啦~机会就摆在这,敢不敢来试一试呢?(和我一样,做个勇敢的女孩)
下午吃泡馍:数字马力的薪资一般哇,5年经验的java/测试就给人一万出头,而且刚入职第三天就让人出差,而且是出半年
帮你内推|数字马力 校招
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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