• 用一个assist列表储存最小值,用stack列表存储正常值。

  • 每次push时和assist中最小值作比较,如果比最小值还小,assist和stack同时存储该值,否则只有stack存储该值。

  • 每次pop时判断该值是否为最小值,如果是则需要把assist中的值也pop出来。

  • 每次top只需返回stack中的最后一个值。

  • 每次min时只需返回assist中最后一个值。

    class Solution:
      def __init__(self):
          self.stack = []
          self.assist = []
    
      def push(self, node):
          min = self.min()
          if not min or (min >= node):
              self.assist.append(node)
              self.stack.append(node)
          else:
              self.stack.append(node)
          # write code here
    
      def pop(self):
          if self.stack:
              if self.assist[-1] == self.stack[-1]:
                  self.assist.pop()
                  self.stack.pop()
              else:
                  self.stack.pop()
          # write code here
    
      def top(self):
          if self.stack:
              return self.stack[-1]
          # write code here
    
      def min(self):
          if self.assist:
              return self.assist[-1]
          # write code here
    

```