题解 | #设计LRU缓存结构 list + map#

设计LRU缓存结构

https://www.nowcoder.com/practice/5dfded165916435d9defb053c63f1e84

我们通过 map + list 的方式实现LRU

我们需要额外记录两个值

  • nbytes 表示当前使用的内存
  • capacity 表示当前的容量

我们为了方便额外记录一个 entry 记录一下key 和 value ,方便删除map中的值

package main
import "container/list"
type Solution struct {
     // write code here
     nbytes   int
     capacity int
     ll    *list.List
     cache map[int]*list.Element
}
type entry struct{
    key int
    value int
}

func Constructor(capacity int) Solution {
    // write code here
    return Solution{
        capacity: capacity,
        ll: list.New(),
        cache: make(map[int]*list.Element),
    }
}


func (this *Solution) get(key int) int {
    // write code here
    if ele , ok := this.cache[key]; ok {
        this.ll.MoveToFront(ele);
        kv := ele.Value.(*entry);
        return kv.value
    }
    return -1
}

func (this *Solution) Remove(){
    ele := this.ll.Back()

    if ele != nil {
        this.ll.Remove(ele)
        kv := ele.Value.(*entry)
        this.nbytes -= 1;
        delete(this.cache,kv.key)
    }
}
func (this *Solution) set(key int, value int)  {
    // write code here
    if ele,ok := this.cache[key]; ok {
        this.ll.MoveToFront(ele) 
        kv := ele.Value.(*entry)
        kv.value = value
    }else{
        this.nbytes += 1;
        ele := this.ll.PushFront(&entry{key , value})
        this.cache[key] = ele
    }
    for this.capacity != 0 && this.capacity < this.nbytes {
        this.Remove()
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-02 17:28
25届每天都在焦虑找工作的事情0offer情绪一直很低落硬撑着面了一个岗位岗位有应酬的成分面试的时候hr给我出各种场景题问的问题比较犀利&nbsp;有点压力面的感觉感觉有点回答不上来本来就压抑的情绪瞬间爆发了呢一瞬间特别想哭觉得自己特别没用没绷住掉眼泪了事后想想觉得自己挺有病的&nbsp;真的破大防了
喜欢唱跳rap小刺猬...:我觉得没关系吧,之前有一次面试leader给我压力面,我顶住了压力,结果入职的时候发现组里氛围很差,果断跑路。其实从面试就能大概看出组的情况,面试体验好的组倒是不一定好,但是面试体验不好的组。。。就很难说
点赞 评论 收藏
分享
06-17 21:57
门头沟学院 Java
白友:噗嗤,我发现有些人事就爱发这些,明明已读不回就行了,就是要恶心人
点赞 评论 收藏
分享
07-04 09:21
已编辑
Java
推拿大师:这是hr发的钓鱼贴吗
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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