牛客_设计LRU缓存结构

设计LRU缓存结构
https://www.nowcoder.com/practice/5dfded165916435d9defb053c63f1e84

import java.util.*;

/**
 * NC93 设计LRU缓存结构
 * @author d3y1
 */
public class Solution {
    private Deque<Integer> keyQueue = new LinkedList<>();
    private HashMap<Integer,Integer> kvMap = new HashMap<>();
    private int capacity;

    public Solution(int capacity) {
        this.capacity = capacity;
    }

    public int get(int key) {
        // 存在
        if(kvMap.containsKey(key)){
            keyQueue.remove(key);
            keyQueue.offerFirst(key);
            return kvMap.get(key);
        }

        // 不存在
        return -1;
    }

    public void set(int key, int value) {
        // 存在
        if(kvMap.containsKey(key)){
            keyQueue.remove(key);
        }
        // 不存在
        else{
            // LRU key
            int rmKey;
            if(keyQueue.size() >= capacity){
                rmKey = keyQueue.peekLast();
                kvMap.remove(rmKey);
                keyQueue.remove(rmKey);
            }
        }
        keyQueue.offerFirst(key);
        kvMap.put(key, value);
    }
}

/**
 * Your Solution object will be instantiated and called as such:
 * Solution solution = new Solution(capacity);
 * int output = solution.get(key);
 * solution.set(key,value);
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值