https://leetcode.com/problems/min-stack/
思路1
参考http://www.cnblogs.com/zuoyuan/p/4091870.html
维护一个minStack,可以记录最小值,第二小的值,第三小的值。。。。。
class MinStack:
# @param x, an integer
def __init__(self):
self.stack1 = []
self.stack2 = []
# @return an integer
def push(self, x):
self.stack1.append(x)
if len(self.stack2) == 0 or x <= self.stack2[-1]:
self.stack2.append(x)
# @return nothing
def pop(self):
top = self.stack1[-1]
self.stack1.pop()
if top == self.stack2[-1]:
self.stack2.pop()
# @return an integer
def top(self):
return self.stack1[-1]
# @return an integer
def getMin(self):
return self.stack2[-1]
思路2
ref: http://bookshadow.com/weblog/2014/11/10/leetcode-min-stack/
class MinStack(object):
def __init__(self):
"""
initialize your data structure here.
"""
self.stack =[]
self.minStack = []
def push(self, x):
"""
:type x: int
:rtype: nothing
"""
self.stack.append(x)
if len(self.minStack) and x == self.minStack[-1][0]:
self.minStack[-1] = (x, self.minStack[-1][1] + 1)
elif len(self.minStack) == 0 or x < self.minStack[-1][0]:
self.minStack.append((x,1))
def pop(self):
"""
:rtype: nothing
"""
if self.top() == self.minStack[-1][0]:
if self.minStack[-1][1] > 1:
self.minStack[-1] = (self.minStack[-1][0], self.minStack[-1][1] - 1)
else:
self.minStack.pop()
self.stack.pop()
def top(self):
"""
:rtype: int
"""
return self.stack[-1]
def getMin(self):
"""
:rtype: int
"""
return self.minStack[-1][0]