147.最小栈

题目

链接:leetcode链接

思路

这道题目做起来还是比较简单的,使用两个栈就可以实现题目要求。

其中一个栈s实现栈的基本功能,另一个栈mins实现检索最小元素的功能。

来看一下怎么样实现检索最小元素的功能呢?

我们可以这么做:

在每一次入栈的时候,都将该元素x与mins栈的栈顶元素top相比较

1、x <= top

x入mins栈,此时x也就成了最小的元素

注意这里要加上等号,因为,可能会有多个最小的元素,比如出现多个0等

2、x > top

x不入mins栈

出栈的时候怎么实现呢?

将s.top 与mins.top进行比较

1、s.top == mins.top

也就是最小元素,此时两个栈同时pop

2、s.top > mins.top

仅s栈pop即可

mins.top一定是最小元素,所以s.top 不可能 < mins.top

其余功能很容易实现,就不进行讲解了

代码

C++ 复制代码
class MinStack {
public:

    stack<int> s1;
    stack<int> mins;
    /** initialize your data structure here. */
    MinStack() {
    }
    
    void push(int x) {
        s1.push(x);
        if(mins.empty() || x <= mins.top())
        {
            mins.push(x);
        }
    }
    
    void pop() {
        if(s1.top() <= mins.top()) mins.pop();
        s1.pop();   
    }
    
    int top() {
        return s1.top();
    }
    
    int getMin() {
        return mins.top();
    }
};
相关推荐
Asize10 小时前
数组数据结构底层:从灵活到陷阱
前端·javascript·算法
John_ToDebug10 小时前
Chromium 132→148 升级实战:Legacy IPC 消息丢失问题深度解析
c++·chrome·ai·架构
wuminyu11 小时前
Java世界中StringTable源码剖析
java·linux·c语言·jvm·c++
hairenwangmiao11 小时前
B4041 [GESP202409 四级] 区间排序
算法·排序
人道领域11 小时前
【LeetCode刷题日记】47.全排列Ⅱ
java·开发语言·算法·leetcode
漂流瓶jz11 小时前
UVA-1606 两亲性分子 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·向量·aoapc·算法竞赛入门经典·atan2·浮点
Navigator_Z11 小时前
LeetCode //C - 1095. Find in Mountain Array
c语言·算法·leetcode
不会就选b11 小时前
算法日常・每日刷题--<二分查找>1
算法
「維他檸檬茶」12 小时前
大模型算法学习2026.6.13
学习·算法
叫我:松哥12 小时前
基于Python的共享单车租赁数据分析与预测系统,技术栈flask+boostrap+随机森林+XGBoost
人工智能·python·深度学习·算法·随机森林·数据分析·flask