min最小栈(Python解法)
包含min函数的栈
http://www.nowcoder.com/questionTerminal/4c776177d2c04c2494f2555c9fcc1e49
思路:栈stack保存数据,辅助栈assist保存依次入栈最小的数
stack中依次入栈,6,5,8,4,3,9
assist依次入栈,6,5,4,3
每次入栈的时候,如果入栈的元素比assist中的栈顶元素小或等于则入栈,否则不如栈。
# -*- coding:utf-8 -*- class Solution: def __init__(self): self.stack = [] #数据栈 self.assist = [] #辅助栈 def push(self, node): # write code here min = self.min() #得到栈中元素的最小值 if min > node&nbs***bsp;not min: #若待入栈的元素值小于栈中最小值或栈为空时 self.stack.append(node) #将这个元素分别压入数据栈和辅助栈 self.assist.append(node) else: self.stack.append(node) #否则只将这个元素压入数据栈 def pop(self): # write code here if self.stack: if self.stack[-1] == self.assist[-1]: #若数据栈和辅助栈的栈顶的元素值相等 self.stack.pop() #则分别将这两个栈的栈顶元素弹出 self.assist.pop() else: self.stack.pop() #否则只弹出数据栈的栈顶元素 def top(self): # write code here if self.stack: return self.stack[-1] #返回数据栈的栈顶元素 def min(self): # write code here if self.assist: return self.assist[-1] #返回辅助栈顶层元素,即最小值