zoukankan      html  css  js  c++  java
  • leetcode 460 LFU缓存

    原题点这里

    class Node implements Comparable<Node>{
        public int key;
        public int value;
        public int lastTime;
        public int fre;
        public Node(int key,int value,int lastTime){
            this.key=key;
            this.value=value;
            this.lastTime = lastTime;
            this.fre=1;
        }
    
        @Override
        public int compareTo(Node o) {
    
            if(this.fre!=o.fre){
                //System.out.println(this.key+"++++fre:"+this.fre);
                //System.out.println(o.key+"+++++fre"+o.fre);
                //System.out.println(Integer.compare(o.fre,this.fre));
                return Integer.compare(this.fre,o.fre);
            }
            //System.out.println(this.key+"---"+this.value);
            //System.out.println(o.key+"----"+o.value);
            //System.out.println(-Integer.compare(this.lastTime,o.lastTime));
            return Integer.compare(this.lastTime,o.lastTime);
        }
    
        public void setValue(int value,int lastTime) {
            this.value=value;
            this.lastTime=lastTime;
            this.fre++;
        }
    
        public int getValue(int lastTime) {
            this.lastTime=lastTime;
            this.fre++;
            return value;
    
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Node node = (Node) o;
            return key == node.key;
    
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(key, value);
        }
    }
    class LFUCache {
        public int capacity;
        public int time;
        public HashMap<Integer,Node> values;
        public TreeSet<Node> keys;
        public LFUCache(int capacity) {
            time=0;
            this.capacity=capacity;
            values = new HashMap<Integer, Node>();
            keys = new TreeSet<Node>();
    
    
        }
    
        public int get(int key) {
            if(capacity==0) return -1;
            if(values.containsKey(key)){
                Node oldN = values.get(key);
                keys.remove(oldN);
                int ans = oldN.getValue(++time);
                keys.add(oldN);
                return ans;
            }
    
            else return -1;
    
        }
    
        public void put(int key, int value) {
            if(capacity==0) return;
            if(values.containsKey(key)){
                Node oldN = values.get(key);
                keys.remove(oldN);
                oldN.setValue(value,++time);
                keys.add(oldN);
    
            }else{
                if(values.size()==this.capacity) {
                    Node n = values.get(keys.first().key);
                    values.remove(n.key);
                    keys.remove(n);
                }
    
                Node s = new Node(key,value,++time);
                values.put(key,s);
                keys.add(s);
    
            }
    
        }
    
    }
    View Code
  • 相关阅读:
    supervisord 小记
    linux 查找文件与进程常用命令
    旷世奇坑!!!spring 不能自动注入
    RPM方式安装MySQL5.6
    linux 常见问题&解决方案
    linux下的守护进程
    java 读写properties
    良好的编码规范
    良好的日志记录规范
    两种方式实现适配器
  • 原文地址:https://www.cnblogs.com/superxuezhazha/p/12643859.html
Copyright © 2011-2022 走看看