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

 

posted @ 2020-10-07 17:51  vv_869  阅读(123)  评论(0编辑  收藏  举报