//example
1 1 -
1 1 -
6 - 6
6 - 6
5 5 5
main min max
stack:
main = new stack()
min = new stack()
max = new stack()
push(x):
main.push(x)
if min.isempty() || x <= min.peek():
min.push(x)
if max.isempty() || x >= max.peek():
max.push(x)
x pop():
if main.isempty():
throw
x = main.pop()
if x == min.peek():
min.pop() //ignore
if x == max.peek():
max.pop() //ignore
return x
// time: O(1), space: O(n)
x min():
if min.isempty():
throw
return min.peek()
// time: O(1), space: O(n)
x max():
if max.isempty():
throw
return max.peek()
No comments:
Post a Comment