master
1def assert_equal(x, y)
2 raise [x, y].inspect unless x == y
3end
4
5class MaxStack
6 def initialize
7 @items = []
8 @maxes = []
9 end
10
11 def push(value)
12 if @maxes.empty? || value > @maxes[-1]
13 @maxes.push(value)
14 end
15 @items.push(value)
16 end
17
18 def pop
19 result = @items.pop
20 @maxes.pop if result == @maxes[-1]
21 result
22 end
23
24 # time: O(1)
25 # space: O(1)
26 def max
27 @maxes[-1]
28 end
29end
30
31stack = MaxStack.new
32stack.push(1)
33stack.push(2)
34stack.push(3)
35stack.push(2)
36
37assert_equal 3, stack.max
38
39stack.pop
40stack.pop
41assert_equal 2, stack.max
42
43puts 'Yay!'