包含min函数的栈

包含min函数的栈

题目来自acwing

题目(点击跳转)

设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈。

  • push(x)–将元素x插入栈中
  • pop()–移除栈顶元素
  • top()–得到栈顶元素
  • getMin()–得到栈中最小元素

数据范围

操作命令总数 [0,100]。

样例

MinStack minStack = new MinStack();
minStack.push(-1);
minStack.push(3);
minStack.push(-4);
minStack.getMin();   --> Returns -4.
minStack.pop();
minStack.top();      --> Returns 3.
minStack.getMin();   --> Returns -1.

思路:

题目要求实现一个随时可以获取所有元素中最小值的栈,这里需要维护一个单调栈

  • 也就是当对栈进行压栈操作时,判断一下单调栈是否为空或者单调栈栈顶元素是否大于要压入的元素,如果满足则将该元素也同步压入单调栈中,当要去最小值时直接将单调栈的栈顶元素取出即可。
  • 当进行弹出栈顶元素时,判断一下栈顶元素是否与单调栈栈顶元素相同,如果相同那么代表栈中该元素弹出,两个栈中都弹出。

代码:

class MinStack {
public:
    /** initialize your data structure here. */
    stack<int> stackValue;
    stack<int> stackMin;
    MinStack() {
        
    }
    
    void push(int x) {
        stackValue.push(x);
        if(stackMin.empty() || stackMin.top() >= x)
            stackMin.push(x);
    }
    
    void pop() {
        if(stackValue.top() == stackMin.top())
            stackMin.pop();
        stackValue.pop();
    }
    
    int top() {
        return stackValue.top();
    }
    
    int getMin() {
        return stackMin.top();
    }
};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(x);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */
posted @   hhhhuaz  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示