Leetcode算法题【困难】460.LFU缓存

一.原题如下:

在这里插入图片描述

二.解题思路

  1. 使用3个哈希表,KV、KF、FK分别存储key-value键和值映射、key-frequently键和频次映射,frequently-keys频次和键集合映射
  2. 其中两个函数需要额外注意:增加访问频率函数移除最小频率函数,增加访问频率函数需要同时增加KF和FK表;移除最小频率函数需要同时移除FK、KF、和KV这三个表
  3. 以上两个函数中,涉及到移除FK表时,都需要判断键集合是否为空,如果为空需要手动进行删除。
  4. put()函数需要额外注意三个点:判断key是否已经存在;判断缓存大小是否已经超过缓存容量;最后需要设置KF表、FK表、最小频率的默认值为1。
  5. get()函数需要额外注意两点个:判断key是否不存在;需要调用增加访问频率函数。

三.完整题解

具体步骤请查看每个关键步骤的代码注释

public class LFUCache {
   
    HashMap<Integer, Integer> kv;
    HashMap<Integer, Integer> kf;
    HashMap<Integer, LinkedHashSet<Integer>> fk;
    int minFrequently;
    int capacity;

    public LFUCache(int capacity) {
   
        this.minFrequently = 0;
        this.capacity = capacity;
        this.kv = new HashMap<>(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值