# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.stack1 = []
self.stack2 = [] # 用于存储最小值
def push(self, node):
# write code here
self.stack1.append(node)
# 如果stack2为空或当前node小于等于stack2的栈顶
if len(self.stack2) == 0 or node <= self.stack2[-1]:
self.stack2.append(node)
def pop(self):
# write code here
if len(self.stack1) == 0:
return None
popped_value = self.stack1.pop()
# 如果弹出的元素是最小值,也从stack2中弹出
if popped_value == self.stack2[-1]:
self.stack2.pop()
return popped_value
def top(self):
# write code here
if len(self.stack1) == 0:
return None
return self.stack1[-1]
def min(self):
# write code here
if len(self.stack2) == 0:
return None
return self.stack2[-1] # 栈顶元素始终是当前最小值