LRUCache LeetCode OJ
2015-09-09 00:00
288 查看
摘要: 参考了网上一些代码,用python实现的LRU算法缓存器
# LRUCache class DictMap: def __init__(self): self.dict = {} self.size = 0 def set(self, key, value): self.size+=1 self.dict[key] = value def get(self, key): value = None if(self.containKey(key)): value = self.dict[key] return value def remove(self, key): del self.dict[key] self.size-=1 def containKey(self, key): try: self.dict[key] return True except: return False class Entry: def __init__(self, k, v): self.k = k self.v = v self.pre = None self.next = None class LRUCache(object): def __init__(self, capacity): self.c = capacity self.m = DictMap() self.head = Entry(-1, -1) self.tail = Entry(1, 1) self.head.next = self.tail self.tail.pre = self.head def get(self, key): if(self.m.containKey(key)): e = self.m.get(key) self.__moveToHead(e) return e.v else: return -1 def set(self, key, value): if(self.m.containKey(key)): e = self.m.get(key) e.v = value self.__moveToHead(e) elif(self.m.size<self.c): e = Entry(key, value) self.__moveToHead(e) self.m.set(key, e) else: e = Entry(key, value) self.__moveToHead(e) self.m.set(key, e) index = self.__removeEnd() self.m.remove(index) def __removeEnd(self): e = self.tail.pre self.tail.pre.pre.next = self.tail self.tail.pre = e.pre e.pre = None e.next = None return e.k def __moveToHead(self, e): if(e.next!=None and e.pre!=None): e.pre.next = e.next e.next.pre = e.pre e.pre = self.head e.next = self.head.next self.head.next.pre = e self.head.next = e
相关文章推荐
- MinStack LeetCode OJ
- Binary Tree Preorder Traversal LeetCode OJ
- N-Queens LeetCode OJ
- AFNetworking图片缓存问题
- build wireshark on windows
- 从二维PHP数组中取出某个键名的值数组
- Session机制的基本原理
- 倒计时处理
- CentOS6.3搭建NTP服务器
- 批处理缩写
- 大家都用什么Maven插件?及本人的几个常用插件分享
- tomcat远程调试
- sizeof()用法汇总
- 剑指offer面试28
- awaitTermination() shutdown()
- java synchronized详解
- 批处理缩写
- tomcat远程调试
- 细说JavaScript异步函数发展历程
- 数据库版本管理工具Flyway——基础篇