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();
    }
};
相关推荐
HellowAmy1 分钟前
我的C++规范 - 鸡蛋工厂
开发语言·c++·代码规范
少许极端5 分钟前
算法奇妙屋(二十八)-递归、回溯与剪枝的综合问题 1
java·算法·深度优先·剪枝·回溯·递归
仰泳的熊猫6 分钟前
题目1453:蓝桥杯历届试题-翻硬币
数据结构·c++·算法·蓝桥杯
rainbow68896 分钟前
C++STL list容器模拟实现详解
开发语言·c++·list
唐梓航-求职中6 分钟前
技术-算法-leetcode-1606. 找到处理最多请求的服务器(易懂版)
服务器·算法·leetcode
啊阿狸不会拉杆7 分钟前
《机器学习导论》第 10 章-线性判别式
人工智能·python·算法·机器学习·numpy·lda·线性判别式
会叫的恐龙9 分钟前
C++ 核心知识点汇总(第11日)(排序算法)
c++·算法·排序算法
twilight_4699 分钟前
机器学习与模式识别——线性回归算法
算法·机器学习·线性回归
玄同76516 分钟前
Python Random 模块深度解析:从基础 API 到 AI / 大模型工程化实践
人工智能·笔记·python·学习·算法·语言模型·llm
Pluchon19 分钟前
硅基计划4.0 算法 简单模拟实现位图&布隆过滤器
java·大数据·开发语言·数据结构·算法·哈希算法