栈-最小栈

本文介绍了如何使用两个栈(数据栈和最小值栈)来解决最小栈问题,强调了最小栈不仅存储全局最小值,还存储局部最小值。代码展示了如何在push、pop、top和getMin操作中维护这两个栈的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.题目描述

题目链接
在这里插入图片描述
解题思路:
我们可以采用两个栈来解决该问题,一个是保存数据的栈,一个是保存最小元素的栈。
例如:
输入:
[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”]
[ [], [-2], [0], [-2], [], [], [], [] ]
输出:
[null,null,null,null,-2,null,0,-2]
元素入栈后栈中的情况如下图所示:
在这里插入图片描述

2.测试代码

class MinStack {
private:
    stack<int> data_sta;//定义一个数据栈
    stack<int> min_sta;//定义一个最小值栈
public:
    MinStack() {

    }
    void push(int val) {
       data_sta.push(val);
       if(min_sta.empty() || min_sta.top()>=val){//相同的最小值可有多个
           min_sta.push(val);
       }
    }
    void pop() {
        int x=data_sta.top();
        if(x == min_sta.top()){//当数据栈中最小值出栈时,存放最小值的栈也出栈
            min_sta.pop();           
        }
        data_sta.pop();
    }
    int top() {
        int x;
        x=data_sta.top();
        return x;  
    }
    int getMin() {
        return min_sta.top();
    }
};

3.测试结果

在这里插入图片描述
注意:**最小栈中存放的元素不光是全局最小值,而是局部最小值,当然全局最小的值也存放在里面。**当全局最小出栈后,次小值作为最小值。

       if(min_sta.empty() || min_sta.top()>=val){
           min_sta.push(val);
       }

从这里可以看出,当最小值入栈前,次小值,次次小值都入栈了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值