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();
    }
};
相关推荐
Mr_WangAndy16 小时前
C++数据结构与算法_数据结构与算法概念_时间复杂度
c++·c++数据结构与算法·时间复杂度分析
拼好饭和她皆失16 小时前
高效算法的秘诀:滑动窗口(尺取法)全解析
数据结构·算法·滑动窗口·尺取法
断剑zou天涯16 小时前
【算法笔记】二叉树的Morris遍历
数据结构·笔记·算法
元亓亓亓16 小时前
LeetCode热题100--739. 每日温度--中等
python·算法·leetcode
小白程序员成长日记16 小时前
2025.12.11 力扣每日一题
数据结构·算法·leetcode
一碗白开水一16 小时前
【论文阅读】Denoising Diffusion Probabilistic Models (DDPM)详细解析及公式推导
论文阅读·人工智能·深度学习·算法·机器学习
代码游侠16 小时前
学习笔记——进程
linux·运维·笔记·学习·算法
天赐学c语言16 小时前
12.11 - 最长回文子串 && main函数是如何开始的
c++·算法·leetcode
deng-c-f16 小时前
C/C++内置库函数(4):c++左右值及引用的概念、move/forward的使用
c语言·开发语言·c++
CoovallyAIHub16 小时前
AI模型训练有哪些关键步骤与必备工具?从概念到可运行的智能模型
深度学习·算法·计算机视觉