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();
    }
};
相关推荐
千里马-horse3 分钟前
React Native bridging 源码分析--ClassTest.cpp
javascript·c++·react native·react.js·bridging
MicroTech20256 分钟前
MLGO微算法科技通过高阶方法和重新缩放进一步改进非线性微分方程的量子算法
科技·算法
三月微暖寻春笋11 分钟前
【和春笋一起学C++】(五十三)使用指向对象的指针
c++·初始化·指向对象的指针
菜鸟233号13 分钟前
力扣474 一和零 java实现
java·数据结构·算法·leetcode·动态规划
CoovallyAIHub17 分钟前
2026 CES 如何用“视觉”改变生活?机器的“视觉大脑”被点亮
深度学习·算法·计算机视觉
小杨同学4917 分钟前
C 语言实战:水果总价计算程序(结构体应用 + 细节优化)
后端·算法·程序员
2301_8002561125 分钟前
【人工智能引论期末复习】第4章 机器学习1-基础知识
人工智能·算法·机器学习
seeksky27 分钟前
分词与 BPE 实现(tiktoken)
算法
super杨某人29 分钟前
算法十日谈:双指针
数据结构·算法
kklovecode31 分钟前
C语言数组:零长数组,可变数组,多维数组
java·c语言·算法