【Leetcode-146】 LRU Cache

3 篇文章 0 订阅
3 篇文章 0 订阅

原题连接:https://leetcode.com/problems/lru-cache/

思路1:

用到两个数据结构:Map和List,由于原题中对时间复杂度有所限制O(1),因此我们借用Map结构达到该时间复杂度要求。

但由于LRU有具体容量的限制,在最近最少使用规则下,当达到最大容量限制时,该删掉哪一个元素则需要借用List进行确定。

 

 思路2:LinkedHashMap  accessOrder为 true: 访问为时间顺序 /  false:插入顺序排序

 

参考代码如下(Accepted):

class LRUCache {
    int capacity = 0;
    HashMap<String, Integer> map;
    ArrayList<String> list;

    public LRUCache(int capacity) {
        this.capacity = capacity;
        this.map = new HashMap();
        this.list = new ArrayList();
    }
        
        //读取
    public int get(int key) {
        if (!map.containsKey(String.valueOf(key))) {
            return -1;
        } else {
            int result = map.get(String.valueOf(key));
            putToStart(key, map.get(String.valueOf(key)));
            return result;
        }
    }
        
        //添加
    public void put(int key, int value) {
        map.put(String.valueOf(key), value);
        putToStart(key, value);
    }

    public void putToStart(int key, int value) {
        list.remove(String.valueOf(key));
        list.add(0, String.valueOf(key));

        if (list.size() > capacity) {
                map.remove(list.get(list.size() - 1));
                list.remove(list.size() - 1);
        }
    }
 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值