最小栈

🎯 问题描述(来源于LeetCode)

描述
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

实现 MinStack 类:

  • MinStack() 初始化堆栈对象。
  • void push(int val) 将元素val推入堆栈。
  • void pop() 删除堆栈顶部的元素。
  • int top() 获取堆栈顶部的元素。
  • int getMin() 获取堆栈中的最小元素。
    说明
  • -231 <= val <= 231 - 1
  • poptop 和 getMin 操作总是在 非空栈 上调用
  • pushpoptop, and getMin最多被调用 3 * 104 次

示例

  • 示例 1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
输入:
["MinStack","push","push","push","getMin","pop","top","getMin"]
[[],[-2],[0],[-3],[],[],[],[]]
输出:
[null,null,null,null,-3,null,0,-2]
解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.

💻 解题思路

思路1:栈

思路1:代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class MinStack:

def __init__(self):
self.stack=[]
self.minstack=[]

def push(self, val: int) -> None:
if not self.stack:
self.stack.append(val)
self.minstack.append(val)
else:
self.stack.append(val)
self.minstack.append(min(val,self.minstack[-1]))

def pop(self) -> None:
self.stack.pop()
self.minstack.pop()

def top(self) -> int:
return self.stack[-1]

def getMin(self) -> int:
return self.minstack[-1]


# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(val)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.getMin()

思路1:📊 性能分析

提交结果
  • 运行时间:11ms击败26.53%
  • 内存消耗:22.11MB击败55.49%
复杂度验证
  • 时间复杂度:O(1)O(1)
  • 空间复杂度:O(N)O(N)

思考