c++实现存在min函数的栈

leetcode解题链接

普通栈的 push() 和 pop() 函数的复杂度为 O(1);而获取栈最小值 min() 函数需要遍历整个栈,复杂度为O(N) 。
现在要实现获取栈最小值 min() 函数,并使其复杂度为O(1)

#include<iostream>
#include<stack>
using namespace std;

//实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
//使用一个辅助栈来实现这个需求。辅助栈的保持一个非严格递减的状态。
class MinStack{
    //stack_a作为原始栈来存放数据
    stack<int> stack_a;
    //stack_b作为辅助栈用于存放一个非严格递减的序列,栈顶元素一直表示的是栈stack_a中的最小值
    stack<int> stack_b;
public:
    MinStack(){}

    void push(int value){
        stack_a.push(value);
        //当stack_b为空,或者当前插入的值小于等于stack_b的栈顶元素时,将新元素插入至stack_b
        if(stack_b.empty()||value<=stack_b.top()){
            stack_b.push(value);
        }
    }
    int pop(){
        int value=stack_a.top();
        stack_a.pop();
        if(value==stack_b.top()){
            stack_b.pop();
        }
        return value;
    }
    int get_min(){
        return stack_b.top();
    }
    int top(){
        return stack_a.top();
    }
};

int main()
{
    MinStack s;
    s.push(-2);
    s.push(0);
    s.push(-3);
    cout <<s.get_min()<< endl;
    cout <<s.pop()<< endl;
    cout <<s.top()<< endl;
    cout <<s.get_min()<< endl;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值