(漫画算法也有这道题)
想调用min函数,我们需要有一个辅助栈,记录目前的最小值。
每次进行push操作,辅助栈中要压入当前数据栈中最小数字。
进行pop操作时,辅助栈弹出栈底数字。
进行min操作时,得到辅助栈栈底数字。


比如:

  • 压入4:辅助栈[4]
  • 压入5:辅助栈[4,4]
  • 压入3:辅助栈[4,4,3]
  • pop: 辅助栈[4,4]
  • min: 4

class Solution:
    def __init__(self):
        # 数据栈
        self.data = []
        # 辅助栈
        self.helper = []

    def push(self, node):
        # write code here
        self.data.append(node)
        #保存最小元素,考虑当前辅助栈为空
        if len(self.helper) == 0 or node <= self.helper[-1]:
            self.helper.append(node)
        #将当前辅助栈中最小元素压入,保持辅助栈和数据栈中元素个数相同
        else:
            self.helper.append(self.helper[-1])
    def pop(self):
        # write code here
        if self.data:
            self.helper.pop()
            return self.data.pop()
    def top(self):
        # write code here
         if self.data:
            return self.data[-1]

    def min(self):
        # write code here
        if self.helper:
            return self.helper[-1]