设计LRU缓存结构(python版)

设计LRU缓存结构

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

这题文字有点多呀,实际上是让你设计数据结构:⾸先要接收⼀个 capacity 参数作为 缓存的最⼤容量,然后实现两个 API,⼀个是 put(key, val) ⽅法存⼊键值 对,另⼀个是 get(key) ⽅法获取 key 对应的 val,如果 key 不存在则返回 -1。要让 put 和 get ⽅法的时间复杂度为 O(1),我们可以 总结出 cache 这个数据结构必要的条件:查找快,插⼊快,删除快,有顺序 之分。 因为显然 cache 必须有顺序之分,以区分最近使⽤的和久未使⽤的数据;⽽ 且我们要在 cache 中查找键是否已存在;如果容量满了要删除最后⼀个数 据;每次访问还要把数据插⼊到队头。

简单看下代码了解下吧

#
# lru design
# @param operators int整型二维数组 the ops
# @param k int整型 the k
# @return int整型一维数组
#
import collections
class Solution:
    def __init__(self, k):
        self.dic = collections.OrderedDict()
        self.capacity = k

    def get(self, key):
        if key not in self.dic: return -1
        val = self.dic.pop(key)
        self.dic[key] = val
        return val

    def set(self, key, value):
        if key in self.dic:
            self.dic.pop(key)
        else:
            if self.capacity > 0:
                self.capacity -= 1
            else:
                self.dic.popitem(last=False)
        self.dic[key] = value

s = input().strip()
idx = s.index("]],")
k = int(s[idx+3:])
ss = s[:idx]
aa = ss.strip("[[").split("],[")
s = Solution(k)
res = []
for r in aa:
    ss = list(map(int, r.strip().split(",")))
    if ss[0] == 1:
        s.set(ss[1], ss[2])
    elif ss[0] == 2:
        x = s.get(ss[1])
        res.append(x)
print(str(res).replace(" ", ""))

麻豆出品

全部评论
lsp了
1 回复 分享
发布于 2020-11-26 18:46
提交不通过
点赞 回复 分享
发布于 2021-06-09 11:18
麻豆?就给我看这?
点赞 回复 分享
发布于 2021-03-21 17:29
结果有问题?
点赞 回复 分享
发布于 2021-03-06 21:04
看到麻豆就点了进来
点赞 回复 分享
发布于 2021-02-23 18:27
为什么python需要自己处理输入输出
点赞 回复 分享
发布于 2021-01-26 14:57
输入不是数组和整数吗,为什么python的答案全是字符串处理啊?给我整蒙了
点赞 回复 分享
发布于 2020-10-24 16:22

相关推荐

程序员牛肉:你这简历有啥值得拷打的?在牛客你这种简历一抓一大把,也就是个人信息不一样而已。 关键要去找亮点,亮点啊,整个简历都跟流水线生产出来的一样。
点赞 评论 收藏
分享
评论
18
3
分享

创作者周榜

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