File tree Expand file tree Collapse file tree 1 file changed +74
-0
lines changed Expand file tree Collapse file tree 1 file changed +74
-0
lines changed Original file line number Diff line number Diff line change
1
+ class LRUCache
2
+
3
+ =begin
4
+ :type capacity: Integer
5
+ =end
6
+ def initialize ( capacity )
7
+ @capacity = capacity
8
+ @cache = { }
9
+ @l = Node . new ( )
10
+ @r = Node . new ( )
11
+ @l . next = @r
12
+ @r . prev = @l
13
+ end
14
+
15
+
16
+ =begin
17
+ :type key: Integer
18
+ :rtype: Integer
19
+ =end
20
+ def get ( key )
21
+ return -1 unless @cache . key? ( key )
22
+
23
+ remove ( @cache [ key ] )
24
+ insert ( @cache [ key ] )
25
+ @cache [ key ] . value
26
+ end
27
+
28
+
29
+ =begin
30
+ :type key: Integer
31
+ :type value: Integer
32
+ :rtype: Void
33
+ =end
34
+ def put ( key , value )
35
+ remove ( @cache [ key ] ) if @cache . key? ( key )
36
+
37
+ @cache [ key ] = Node . new ( key , value )
38
+ insert ( @cache [ key ] )
39
+ evict if @capacity < @cache . size
40
+ end
41
+
42
+ private
43
+ def remove ( node )
44
+ prev = node . prev
45
+ nxt = node . next
46
+
47
+ prev . next = nxt
48
+ nxt . prev = prev
49
+ end
50
+
51
+ def insert ( node )
52
+ prev = @r . prev
53
+ prev . next = node
54
+ @r . prev = node
55
+
56
+ node . prev = prev
57
+ node . next = @r
58
+ end
59
+
60
+ def evict
61
+ lru = @l . next
62
+ remove ( lru )
63
+ @cache . delete ( lru . key )
64
+ end
65
+
66
+ class Node
67
+ attr_accessor :value , :prev , :next , :key
68
+
69
+ def initialize ( key = 0 , val = nil )
70
+ self . value = val
71
+ self . key = key
72
+ end
73
+ end
74
+ end
You can’t perform that action at this time.
0 commit comments