【LeetCode with Python】 LRU Cache
2008-09-13 00:32
435 查看
博客域名:http://www.xnerv.wang
原题页面:https://oj.leetcode.com/problems/lru-cache/
题目类型:数据结构
难度评价:★★
文本地址:/article/1377563.html
Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations:
实现一个LRU缓存。最近最少使用LRU表的定义就不多说了,需要实现的get方法是根据key取value的,因此显然需要一个map,在Python里叫关联数组的帮助。虽然在leetcode中这道题被标为Hard级别,但其实这只是一道工程性质的题目。
原题页面:https://oj.leetcode.com/problems/lru-cache/
题目类型:数据结构
难度评价:★★
文本地址:/article/1377563.html
Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations:
getand
set.
get(key)- Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.
set(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.
实现一个LRU缓存。最近最少使用LRU表的定义就不多说了,需要实现的get方法是根据key取value的,因此显然需要一个map,在Python里叫关联数组的帮助。虽然在leetcode中这道题被标为Hard级别,但其实这只是一道工程性质的题目。
class LRUCache: class LRUNode: def __init__(self, key, value): self.prev = None self.next = None self.key = key self.value = value # @param capacity, an integer def __init__(self, capacity): self.map = { } self.list_head = LRUCache.LRUNode(-1, -1) self.list_tail = LRUCache.LRUNode(-1, -1) self.list_head.next = self.list_tail self.list_tail.prev = self.list_head self.capacity = capacity def remove_node(self, node): node.prev.next = node.next node.next.prev = node.prev def append_node(self, new_node): last_node = self.list_tail.prev last_node.next = new_node new_node.prev = last_node new_node.next = self.list_tail self.list_tail.prev = new_node # @return an integer def get(self, key): if self.map.has_key(key): cur = self.map.get(key) self.remove_node(cur) self.append_node(cur) return cur.value else: return -1 # @param key, an integer # @param value, an integer # @return nothing def set(self, key, value): if self.map.has_key(key): old_node = self.map.get(key) self.remove_node(old_node) old_node.value = value self.append_node(old_node) else: if len(self.map) >= self.capacity: del_node = self.list_head.next self.remove_node(del_node) del self.map[del_node.key] new_node = LRUCache.LRUNode(key, value) self.append_node(new_node) self.map[key] = new_node
相关文章推荐
- leetcode 【 Copy List with Random Pointer 】 python 实现
- 【Leetcode】【python】Container With Most Water
- 【LeetCode with Python】 Copy List with Random Pointer
- 【LeetCode with Python】 N-Queens II
- 【LeetCode with Python】 Sort Colors
- 【LeetCode with Python】 Valid Parentheses
- 【LeetCode with Python】 Binary Tree Level Order Traversal
- 【LeetCode with Python】 Integer to Roman
- 【LeetCode with Python】 Reorder List
- leetcode 日经贴,python,cpp code -Substring with Concatenation of All Words
- 【LeetCode with Python】 Binary Tree Maximum Path Sum
- 【LeetCode with Python】 Wildcard Matching
- LeetCode 11 Container With Most Water (C,C++,Java,Python)
- [leetcode]Substring with Concatenation of All Words @ Python
- 【LEETCODE】357- Count Numbers with Unique Digits [Python]
- 【LeetCode with Python】 Swap Nodes in Pairs
- 【LeetCode with Python】 Pow(x, n)
- 【LeetCode with Python】 Binary Tree Inorder Traversal
- 【LeetCode with Python】 Evaluate Reverse Polish Notation
- [LeetCode]题解(python):030-Substring with Concatenation of All Words