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();
    }
};
相关推荐
乐迪信息几秒前
乐迪信息:智能识别船舶种类的AI解决方案
大数据·网络·人工智能·算法·无人机
朔北之忘 Clancy10 分钟前
第一章 顺序结构程序设计(1)
c++·算法·青少年编程·竞赛·教材·考级·讲义
老鼠只爱大米15 分钟前
LeetCode经典算法面试题 #41:缺失的第一个正数(位置交换法、标记法等多种方法详解)
算法·leetcode·原地哈希·缺失的第一个正数·算法面试·位图法·集合哈希法
星火开发设计18 分钟前
变量与常量:C++ 中 const 关键字的正确使用姿势
开发语言·c++·学习·const·知识
hetao173383724 分钟前
2026-01-14~15 hetao1733837 的刷题笔记
c++·笔记·算法
百度搜不到…25 分钟前
背包问题递推公式中的dp[j-nums[j]]到底怎么理解
算法·leetcode·动态规划·背包问题
一起养小猫43 分钟前
LeetCode100天Day13-移除元素与多数元素
java·算法·leetcode
a***59261 小时前
C++跨平台开发:挑战与解决方案
开发语言·c++
ACERT3331 小时前
10.吴恩达机器学习——无监督学习01聚类与异常检测算法
python·算法·机器学习
诗词在线1 小时前
从算法重构到场景复用:古诗词数字化的技术破局与落地实践
python·算法·重构