描述
实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。
你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成。
如果堆栈中没有数字则不能进行min方法的调用
您在真实的面试中是否遇到过这个题? 是
样例
如下操作:push(1),pop(),push(2),push(3),min(), push(1),min() 返回 1,2,1
思路是增加一个辅助栈(用于存放数据栈之前最小的元素与新压入栈元素之间的较小值)。
示例演示过程:
步骤 | 操作 | 数据栈 | 辅助栈 | 最小值 |
1 | 压入 3 | 3 | 3 | 3 |
2 | 压入 4 | 3, 4 | 3, 3 | 3 |
3 | 压入 2 | 3, 4, 2 | 3, 3, 2 | 2 |
4 | 压入 1 | 3, 4, 2, 1 | 3, 3, 2, 1 | 1 |
5 | 弹出 | 3, 4, 2 | 3, 3, 2 | 2 |
6 | 弹出 | 3, 4 | 3, 3 | 3 |
7 | 压入 0 | 3, 4, 0 | 3, 3, 0 | 0 |
class MinStack:
def __init__(self):
#正常栈
self.numstack=[]
#存放当前最小值的栈
self.minstack=[]
# do intialization if necessary
"""
@param: number: An integer
@return: nothing
"""
def push(self, number):
self.numstack.append(number)
if len(self.minstack)==0:
self.minstack.append(number)
elif self.minstack[-1] <number:
self.minstack.append(self.minstack[-1])
else:
self.minstack.append(number)
# write your code here
"""
@return: An integer
"""
def pop(self):
number=self.numstack.pop()
self.minstack.pop()
return number
# write your code here
"""
@return: An integer
"""
def min(self):
return self.minstack[-1]
# write your code here
s=MinStack()
print(s.push(1))
print(s.pop())
print(s.push(2))
print(s.push(3))
print(s.min())
print(s.push(1))
print(s.min())