Skip to content

Commit da1dd59

Browse files
authored
adding solution for lruCache in python (codedecks-in#113)
1 parent c4eae6d commit da1dd59

File tree

2 files changed

+71
-2
lines changed

2 files changed

+71
-2
lines changed

Python/LRUCache.py

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
class ListNode(object):
2+
def __init__(self,key,val):
3+
self.key = key
4+
self.value = val
5+
self.next = None
6+
self.prev = None
7+
8+
class LRUCache:
9+
10+
def __init__(self, capacity: int):
11+
self.cap = capacity
12+
self.dic = {}
13+
self.head = ListNode(-1,-1)
14+
self.tail = ListNode(-1,-1)
15+
self.head.next = self.tail
16+
self.tail.prev = self.head
17+
18+
19+
def get(self, key: int) -> int:
20+
if key in self.dic:
21+
node = self.dic[key]
22+
self.remove(node)
23+
self.add(node)
24+
return node.value
25+
return -1
26+
27+
def put(self, key: int, value: int) -> None:
28+
29+
if key in self.dic:
30+
node = self.dic[key]
31+
self.remove(node)
32+
del self.dic[node.key]
33+
if len(self.dic)>=self.cap:
34+
node = self.head.next
35+
self.remove(node)
36+
del self.dic[node.key]
37+
38+
node = ListNode(key,value)
39+
self.dic[key] = node
40+
self.add(node)
41+
# self.show(self.head)
42+
43+
44+
45+
def remove(self,node):
46+
prevNode = node.prev
47+
prevNode.next = node.next
48+
node.next.prev = prevNode
49+
50+
def add(self,node):
51+
tailprev = self.tail.prev
52+
tailprev.next = node
53+
node.prev = tailprev
54+
node.next = self.tail
55+
self.tail.prev = node
56+
# self.show(self.head)
57+
58+
def show(self,head):
59+
while head:
60+
print(head.value,end=" ")
61+
head = head.next
62+
print()
63+
64+
65+
66+
# Your LRUCache object will be instantiated and called as such:
67+
# obj = LRUCache(capacity)
68+
# param_1 = obj.get(key)
69+
# obj.put(key,value)

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ Check out ---> [Sample PR](https://github.com/codedecks-in/LeetCode-Solutions/pu
157157
| 109 | [Convert Sorted List to Binary Search Tree](https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/) | [Java](./Java/convert-sorted-list-to-binary-search-tree.java) | _O(n)_ | _O(n)_ | Medium | LinkedList | |
158158
| 141 | [Linked List Cycle](https://leetcode.com/problems/linked-list-cycle/) | [Java](./Java/linked-list-cycle.java) | _O(n)_ | _O(1)_ | Easy | Slow-Fast Pointers | |
159159
| 142 | [Linked List Cycle II](https://leetcode.com/problems/linked-list-cycle-ii/) | [Java](./Java/linked-list-cycle-ii.java) <br> [C++](./C++/Linked-List-Cycle-II.cpp) | _O(n)_ | _O(1)_ | Medium | Slow-Fast Pointers | |
160-
| 146 | [LRU Cache](https://leetcode.com/problems/lru-cache/) | [C++](./C++/LRU-Cache.cpp) | _O(1)_ | _O(k)_ | Medium | Hash Map | |
160+
| 146 | [LRU Cache](https://leetcode.com/problems/lru-cache/) | [C++](./C++/LRU-Cache.cpp) <br> [Python](./Python/LRUCache.py) | _O(1)_ | _O(k)_ | Medium | Hash Map | |
161161
| 186 | [Middle of the Linked List](https://leetcode.com/problems/middle-of-the-linked-list/) | [Java](./Java/middle-of-the-linked-list.java) | _O(n)_ | _O(1)_ | Easy | Two pointers | |
162162
| 23 | [Merge K sorted lists](https://leetcode.com/problems/merge-k-sorted-lists/) | [C++](./C++/merge-k-sorted-lists.cpp) | _O(nlogn)_ | _O(n)_ | Hard | sorting and append | |
163163

@@ -204,7 +204,7 @@ Check out ---> [Sample PR](https://github.com/codedecks-in/LeetCode-Solutions/pu
204204

205205
| # | Title | Solution | Time | Space | Difficulty | Tag | Note |
206206
| ---- | --------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ----------- | ----------- | ---------- | ---------------------------------------------- | ---- |
207-
| 094 | [Binary Tree Inorder Traversal](https://leetcode.com/problems/binary-tree-inorder-traversal/) | [Java](./Java/binary-tree-inorder-traversal.java) </br> [Python](./Python/Iterative-Inorder-tree-traversal) | _O(n)_ | _O(logn)_ | Medium | Binary Tree, Stack, HashTable | |
207+
| 094 | [Binary Tree Inorder Traversal](https://leetcode.com/problems/binary-tree-inorder-traversal/) | [Java](./Java/binary-tree-inorder-traversal.java) <br> [Python](./Python/Iterative-Inorder-tree-traversal) | _O(n)_ | _O(logn)_ | Medium | Binary Tree, Stack, HashTable | |
208208
| 100 | [Same Tree](https://leetcode.com/problems/same-tree/) | [Python](./Python/100.SymmetricTree.py) | _O(n)_ | _O(n)_ | Easy | Tree, Depth-first Search | |
209209
| 101 | [Symmetric Tree](https://leetcode.com/problems/symmetric-tree/) | [Java](./Java/symmetric-tree.java)<br>[Python](./Python/101.SymmetricTree.py) | _O(n)_ | _O(n)_ | Easy | Tree, Breadth-first Search, Depth-first Search | |
210210
| 144 | [Binary Tree Preorder Traversal](https://leetcode.com/problems/binary-tree-preorder-traversal/) | [Java](./Java/binary-tree-preorder-traversal.java) | _O(n)_ | _O(logn)_ | Medium | Binary Tree, Stack | |

0 commit comments

Comments
 (0)