题解 | #设计LRU缓存结构#

设计LRU缓存结构

http://www.nowcoder.com/practice/e3769a5f49894d49b871c09cadd13a61


import "container/list"

type LRUCache struct {
	Len        int                      // 大小
	Value      map[int]int              // value存放 
	LruIndex   map[int]*list.Element    // key 到 链表节点的映射
	Lru       *list.List                // 维护最近访问顺序的链表
}

func (l *LRUCache) set(k, v int) {
	if l.Lru.Len() >= l.Len {
		k := l.Lru.Back().Value.(int)
		delete(l.Value, k)
		delete(l.LruIndex, k)
		l.Lru.Remove(l.Lru.Back())
	}
	l.Value[k] = v
	l.LruIndex[k] = l.Lru.PushFront(k)
}

func (l *LRUCache) get(k int) int {
	if v, ok := l.Value[k]; ok {
		l.Lru.MoveToFront(l.LruIndex[k])
		return v
	}
	return -1
}

func LRU( operators [][]int ,  k int ) []int {
	lru := &LRUCache{
		Len: k,
		Value: make(map[int]int),
        LruIndex: make(map[int]*list.Element),
		Lru: list.New(),
	}

	ret := make([]int, 0)
	for _, v := range operators {
		if v[0] == 1 {
			lru.set(v[1], v[2])
		}
		if v[0] == 2 {
			ret = append(ret, lru.get(v[1]))
		}
	}
	return ret
}
全部评论

相关推荐

od现在都成这样了 就业市场真是crazy
牛客473059135号:没事,我有个朋友是985本硕学计算机的,被华为卡目标院校了简历挂,不过不是od虽然人家拿到一堆别的offer了就挺搞笑的属于是……
点赞 评论 收藏
分享
04-14 20:10
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务