最小栈
最小栈
题目描述
设计一个支持 push
,pop
,top
操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack
类:
MinStack()
初始化堆栈对象。void push(int val)
将元素val推入堆栈。void pop()
删除堆栈顶部的元素。int top()
获取堆栈顶部的元素。int getMin()
获取堆栈中的最小元素。
示例 1:
1 | 输入: |
提示:
-231 <= val <= 231 - 1
pop
、top
和getMin
操作总是在 非空栈 上调用push
,pop
,top
, andgetMin
最多被调用3 * 104
次
代码实现
1 | class MinStack { |
解题思路
-
构造函数
MinStack()
:这是类的构造函数,用于初始化MinStack
对象。 -
push(int val)
方法:这个方法用于将元素值val
压入元素栈_elem
中。如果最小栈_min
为空,或者val
小于等于最小栈的栈顶元素,那么也将val
压入最小栈_min
中,以确保_min
始终包含当前的最小元素。 -
pop()
方法:这个方法用于出栈操作。如果元素栈_elem
的栈顶元素等于最小栈_min
的栈顶元素,表示要弹出的元素是最小值,因此需要同时从最小栈和元素栈中弹出该元素。然后,只需要从元素栈_elem
中弹出元素。 -
top()
方法:这个方法用于返回元素栈_elem
的栈顶元素,即最近入栈的元素。 -
getMin()
方法:这个方法用于返回最小栈_min
的栈顶元素,即最小值。由于在push
操作中保持了最小栈_min
始终包含当前的最小元素,因此可以轻松地获取最小值。
这个类实现了一个特殊的栈,可以在
O(1)
时间内获取栈中的最小值。这对于需要频繁查找最小值的问题非常有用,因为不需要每次都遍历整个栈来找到最小元素。
评论