设计一个支持push、pop、top操作,并能在常数时间内检索到最小元素的栈。
- push(x) —— 将元素x推入栈中。
- pop( ) —— 删除栈顶的元素。
- top( ) —— 获取栈顶元素。
- getMin( ) —— 检索栈中的最小元素。
提示: pop、top和getMin操作总是在非空栈是调用。
示例:
输入:[“MinStack”, “push”, “push”, “push”, “getMin”, “pop”, “top”, “getMin”]
[[ ], [-2], [0], [-3], [ ], [ ], [ ], [ ]]
输出:[null, null, null, null, -3, null, 0, -2]
思路一:
使用两个栈,一个栈用于存储数据(数据栈),另一个栈用于存储数据栈对应位置向下的最小值(最小栈)。
例如,-2入栈时栈为空,则该位置向下的最小值就是-2本身,于是-2入最小栈;接着0入栈,该位置向下的最小值是-2,则-2继续入最小栈;最后-3入栈,该位置向下的最小值就是-3了,则将-3入最小栈。若是数据栈需要出栈,则最小栈也跟着进行出栈操作。

这样一来,无论什么时候,最小栈的栈顶元素都是数据栈中的最小元素。
代码如下:
class MinStack {
public:
/** initialize your data structure here. */
MinStack() {
//构造函数无需编写,使用默认构造函数即可
}
void push(int val) {
_st.push(val); //将val压入数据栈
if (_minst.empty() || val < _minst.top()

本文介绍了如何设计一个支持push、pop、top操作,同时在常数时间内检索到栈中最小元素的高效数据结构。通过两种方法,包括双栈策略和改进的最小值判断规则,展示了如何优化栈操作,以适应频繁查找最小值的需求。
最低0.47元/天 解锁文章
412

被折叠的 条评论
为什么被折叠?



