算法分析课每周练习 LRU Cache
来源:互联网 发布:复杂网络可视化软件 编辑:程序博客网 时间:2024/06/08 15:09
题目
LRU Cache
Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get
and put
分析
LRU Cache很常用的东西,一般需要支持插入和查询两种操作,而且查询性能要好。
class LRUCache(object): def __init__(self, capacity = 5): """ :type capacity: int """ self.capacity = capacity self.cache = dict() self.key = [] def get(self, key): """ :type key: int :rtype: int """ if self.cache.has_key(key): self.key.remove(key) self.key.insert(0,key) return self.cache[key] else: return None def put(self, key, value): """ :type key: int :type value: int :rtype: void """ if self.cache.has_key(key): self.cache.pop(key) self.cache[key] = value self.key.remove(key) self.key.insert(0,key) elif len(self.cache) == self.capacity: old_key = self.key.pop() self.cache.pop(old_key) self.key.insert(0,key) self.cache[key] = value else: self.cache[key] = value self.key.insert(0,key)
代码使用了一个queue来管理cache的进出,remove操作是O(n)级别的,如果通过对dict的扩张,使用双向队列管理的话,时间复杂度可以下降到O(1)
阅读全文
0 0
- 算法分析课每周练习 LRU Cache
- 算法分析课每周练习 Wildcard Matching
- 算法分析课每周练习 Max Points on a Line
- 算法分析课每周练习 Median of Two Sorted Arrays
- 算法分析课每周练习 Word Break II
- 算法分析课每周练习 Word Search II
- 算法分析课每周练习 Regular Expression Matching
- 算法分析课每周练习 Minimum Window Substring
- 算法分析课每周练习 First Missing Positive
- 算法分析课每周练习 Find Median from Data Stream
- 算法分析课每周练习 Binary Tree Maximum Path Sum
- 算法分析课每周练习 Largest Rectangle in Histogram
- 算法分析课每周练习 The Skyline Problem
- 算法分析课每周练习 Merge k Sorted Lists
- 算法分析课每周练习 Sliding Window Maximum
- 算法分析课每周练习 Serialize and Deserialize Binary Tree
- 算法分析课每周练习 Trapping Rain Water
- LRU Cache分析
- 取文件后缀名
- FFmpeg函数简单分析:avformat_close_input()
- knockoutjs的MVVM机制
- ISO 9126质量模型:软件质量模型的6大特性和27个子特性
- insert触发器实例
- 算法分析课每周练习 LRU Cache
- ffmpeg 函数简单分析 : avcodec_decode_video2()
- keil Iar
- 深入理解Spark 2.1 Core (一):RDD的原理与源码分析
- 操作系统-CPU调度
- No such filter: 'drawtext'
- Android自定义view动态绘制百分比圆环进度条
- MySQL数据库锁介绍
- 性能测试的并发数如何计算