Leetcode155.最小栈

155. 最小栈

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

实现 MinStack 类:

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

示例 1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>输入:
>["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.

思路比较简单,只要同时维护一个栈中装有对应元素数量的最小值栈即可(辅助栈)

image-20240831174900619

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import math

class MinStack(object):

def __init__(self):
self.stack = []
self.min_stack = ["inf"]

def push(self, val):
self.stack.append(val)
self.min_stack.append(min(val,self.min_stack[-1]))


def pop(self):
self.stack.pop()
self.min_stack.pop()


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


def getMin(self):
return self.min_stack[-1]