LeetCode 155 _ 最小栈
1. 题目描述
2. 代码
1 class MinStack: 2 def __init__(self): 3 self.stack = [] 4 self.min_stack = [] 5 6 def push(self, x: int) -> None: 7 self.stack.append(x) 8 if len(self.min_stack) == 0 or x <= self.min_stack[-1]: 9 self.min_stack.append(x) 10 11 def pop(self) -> None: 12 x = self.stack.pop() 13 if x == self.min_stack[-1]: 14 self.min_stack.pop() 15 17 # if self.stack[-1] == self.min_stack[-1]: 18 # del self.min_stack[-1] 19 # return self.stack.pop() 20 21 def top(self) -> int: 22 return self.stack[-1] 23 24 def getMin(self) -> int: 25 return self.min_stack[-1]
思路: 这道题目就是设计一种能够在O(1)复杂度获取最小值的栈.
因为普通的栈, 查询最小值, 需要遍历整个栈, 时间复杂度是O(n).
本题“空间换时间”的思想, 增加了一个最小栈, 占用了空间, 但节省了时间.
最小值存在最小栈里, 查询最小值的时间复杂度是O(1), 常数级的复杂度.
3. 整理
pop()函数用于移除列表中的一个元素(默认最后一个元素), 并且返回该元素的值.
最后附上b站该题的一个讲解:
https://www.bilibili.com/video/BV1YK4y1r77W?from=search&seid=10963963257770652967