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

设计LFU缓存结构

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * lfu design
     * @param operators int整型二维数组 ops
     * @param k int整型 the k
     * @return int整型一维数组
     */
    Map<Integer, Integer> map;
    Map<Integer, Integer>  ask;

    public int[] LFU (int[][] operators, int k) {
        // write code here
        map = new HashMap<Integer, Integer>(k);
        ask = new LinkedHashMap();
        List<Integer> result = new ArrayList();
        int m = operators.length;
        int i = 0;
        while (i < m) {
            int [] arr = operators[i];
            int opr = arr[0];
            if (opr == 1) {
                int key = arr[1];
                int value = arr[2];
                if (map.size() < k) {
                    if ( map.get(key) == null) {
                        map.put(key, value);
                        ask.put(key, 1);
                    } else {
                        map.put(key, value);
                        Integer cc =  ask.get(key);
                        ask.remove(key);
                        ask.put(key, cc + 1);

                    }

                } else {
                    if (map.get(key) != null) {
                        map.put(key, value);
                        Integer cc =  ask.get(key);
                        ask.remove(key);
                        ask.put(key, cc + 1);
                    } else {
                        int max = Integer.MAX_VALUE;
                        int delete = 0;
                        for (Map.Entry<Integer, Integer>  entry :   ask.entrySet()) {
                            Integer count    = entry.getValue();
                            if (count < max) {
                                max = count;
                                delete = entry.getKey();
                            }

                        }


                        ask.remove(delete);
                        map.remove(delete);
                        map.put(key, value);
                        ask.put(key, 1);



                    }

                }


            } else {
                if ( map.get(arr[1]) == null) {
                    result.add(-1);
                } else {
                    Integer cc =  ask.get(arr[1]);
                    ask.remove(arr[1]);
                    ask.put(arr[1], cc + 1);
                    result.add(map.get(arr[1]));

                }


            }
            i++;

        }
        int [] reslut = new int[result.size()];
        int x = result.size();
        for (int j = 0; j < x; j++) {
            reslut[j] = result.get(j);
        }
        return  reslut;
    }


}

全部评论

相关推荐

合适才能收到offe...:些许风霜罢了查看图片
点赞 评论 收藏
分享
04-13 11:19
门头沟学院 HTML5
NullPointe...:27实习的都快结束了吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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