Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
- push(x) -- Push element x onto stack.
- pop() -- Removes the element on top of the stack.
- top() -- Get the top element.
- getMin() -- Retrieve the minimum element in the stack.
实现一个栈的基本功能,并做到能在常数时间里找到栈的最小值~解决方法是维护另外一个栈用以存放最小值,如果遇到更小的值就push到最小栈中~
class MinStack:
# @param x, an integer
# @return an integer
def __init__(self):
self.stack = []
self.stackWithMin = []
def push(self, x):
self.stack.append(x)
if len(self.stackWithMin) == 0 or x <= self.stackWithMin[-1]:
self.stackWithMin.append(x)
# @return nothing
def pop(self):
if len(self.stack) == 0:
return
data = self.stack.pop()
if len(self.stackWithMin) != 0 and data == self.stackWithMin[-1]:
self.stackWithMin.pop()
# @return an integer
def top(self):
if len(self.stack) == 0: return 0
return self.stack[-1]
# @return an integer
def getMin(self):
if len(self.stackWithMin) == 0: return 0
return self.stackWithMin[-1]