博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode146. LRU Cache(思路及python解法)
阅读量:2241 次
发布时间:2019-05-09

本文共 1584 字,大约阅读时间需要 5 分钟。

Design and implement a data structure for . It should support the following operations: get and put.

get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.

put(key, value) - Set or insert the value if the key is not already present. When the cache reached its capacity, it should invalidate the least recently used item before inserting a new item.

The cache is initialized with a positive capacity.

Follow up:

Could you do both operations in O(1) time complexity?

Example:

LRUCache cache = new LRUCache( 2 /* capacity */ );cache.put(1, 1);cache.put(2, 2);cache.get(1);       // returns 1cache.put(3, 3);    // evicts key 2cache.get(2);       // returns -1 (not found)cache.put(4, 4);    // evicts key 1cache.get(1);       // returns -1 (not found)cache.get(3);       // returns 3cache.get(4);       // returns 4

完成一个添加、查找的过程。难点在于有限定长度,如果超了需要删除最久没用过的键值对。(有点类似于内存占用算法)

用collection.OrderedDict()真是很方便。

即有顺序,又能根据key进行pop(key),又能根据位置popitem(i)。

注意get的时候相当于调用了,所以pop出来重新加到字典尾部。也可以用self.dic.move_to_end(key)来执行,很方便。

class LRUCache:    def __init__(self, capacity: int):        self.maxl=capacity        self.dic = collections.OrderedDict()    def get(self, key: int) -> int:                if key in self.dic.keys():            temp=self.dic.pop(key)            self.dic[key]=temp            return temp        return -1          def put(self, key: int, value: int) -> None:        if key in self.dic.keys():            self.dic.pop(key)        self.dic[key]=value        if len(self.dic)>self.maxl:            self.dic.popitem(0)

 

转载地址:http://pjrbb.baihongyu.com/

你可能感兴趣的文章
什么是N+1查询?
查看>>
Spring 接管 Hibernate 配置 延迟加载
查看>>
找出不在预定数组中的自然数
查看>>
String常见面试题
查看>>
直插,快排,堆排,归并排序的分析
查看>>
二叉树的各种操作(面试必备)
查看>>
oracle
查看>>
泛型与通配符详解
查看>>
BaseServiceImpl中的实现关键点
查看>>
Struts2中的session、request、respsonse获取方法
查看>>
如何理解MVC模型
查看>>
SpringMVC中乱码解决方案
查看>>
SpringMVC中时间格式转换的解决方案
查看>>
post和get请求相关知识点
查看>>
关于try finally 中的return语句的问题
查看>>
RequestBody/ResponseBody处理Json数据
查看>>
springmvc请求参数获取的几种方法
查看>>
在eclipse中创建和myeclipse一样的包结构
查看>>
Java中的IO流
查看>>
java中的关键字
查看>>