题目链接:https://leetcode-cn.com/problems/min-stack/
难度:简单

描述:
设计一个支持pushpoptop操作,并能在常数时间内检索到最小元素的栈。
实现MinStack类:

  • MinStack()初始化堆栈对象。
  • void push(int val)将元素val推入堆栈。
  • void pop()删除堆栈顶部的元素。
  • int top()获取堆栈顶部的元素。
  • int getMin()获取堆栈中的最小元素。

提示:

  • poptopgetMin操作总是在非空栈上调用

题解

思路:
我们维持两个栈,一个普通栈存放元素,另一个栈存放最小元素。
当元素推入栈中时,若元素比栈中最小元素小,则同样将该元素推入最小栈中,否则将最小栈的栈顶元素复制后推入栈中。这样最小栈栈顶总是普通栈中的最小元素
当弹出元素时,弹出普通栈和最小栈中的元素。

  1. class MinStack:
  2. def __init__(self):
  3. self.stk = []
  4. self.min_stk = []
  5. def push(self, val: int) -> None:
  6. if not self.stk:
  7. self.stk.append(val)
  8. self.min_stk.append(val)
  9. else:
  10. self.stk.append(val)
  11. if val < self.min_stk[-1]:
  12. self.min_stk.append(val)
  13. else:
  14. self.min_stk.append(self.min_stk[-1])
  15. def pop(self) -> None:
  16. self.min_stk.pop()
  17. self.stk.pop()
  18. def top(self) -> int:
  19. return self.stk[-1]
  20. def getMin(self) -> int:
  21. return self.min_stk[-1]