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();
    }
};
相关推荐
_OP_CHEN4 分钟前
【算法基础篇】(五十六)容斥原理指南:从集合计数到算法实战,解决组合数学的 “重叠难题”!
算法·蓝桥杯·c/c++·组合数学·容斥原理·算法竞赛·acm/icpc
MSTcheng.8 分钟前
【C++】C++11新特性(三)
开发语言·c++·c++11
田野追逐星光16 分钟前
STL容器list的模拟实现
开发语言·c++·list
TracyCoder12316 分钟前
LeetCode Hot100(27/100)——94. 二叉树的中序遍历
算法·leetcode
StandbyTime24 分钟前
《算法笔记》学习记录-第二章 C/C++快速入门
c++·算法笔记
九.九24 分钟前
CANN HCOMM 底层机制深度解析:集合通信算法实现、RoCE 网络协议栈优化与多级同步原语
网络·网络协议·算法
我在人间贩卖青春30 分钟前
C++之结构体与类
c++··结构体
rainbow688932 分钟前
C++实现JSON Web计算器
c++
C++ 老炮儿的技术栈33 分钟前
Qt Creator中不写代如何设置 QLabel的颜色
c语言·开发语言·c++·qt·算法
知无不研35 分钟前
lambda表达式的原理和由来
java·开发语言·c++·lambda表达式