Min Stack栈和队列--力扣101算法题解笔记

11.3Min Stack栈和队列

题目描述

设计一个最小栈,除了需要支持常规的栈操作外,还需要支持在O(1)的时间内查询栈内最小值的功能。

输入输出样例

程序调用样例

cpp 复制代码
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); // Returns -3.
minStack.pop();
minStack.top();    // Returns 0.
minStack.getMin(); // Returns -2.

题解

我们可以额外建立一个新栈,栈顶表示原栈里所有值的最小值。每当在原栈里插入一个数字时,若该数字小于等于新栈栈顶,则表示这个数字在原栈里是最小值,我们将其同时插入新栈内。每当从原栈里取出一个数字时,若该数字等于新栈栈顶,则表示这个数是原栈里的最小值之一,我们同时取出新栈 栈顶的值。

cpp 复制代码
#include <iostream>
#include <stack>
using namespace std;

class MinStack {
    stack<int> s, min_s;
public:
    MinStack() {}

    void push(int x) {
        s.push(x);
        if (min_s.empty() || min_s.top() >= x) {
            min_s.push(x);
        }
    }

    void pop() {
        if (!min_s.empty() && min_s.top() == s.top()) {
            min_s.pop();
        }
        s.pop();
    }

    int top() {
        return s.top();
    }

    int getMin() {
        return min_s.top();
    }
};

int main() {
    MinStack minStack;

    minStack.push(-2);
    minStack.push(0);
    minStack.push(-3);

    cout << "Current Min: " << minStack.getMin() << endl; // 应输出 -3

    minStack.pop();

    cout << "Current Top: " << minStack.top() << endl;    // 应输出 0
    cout << "Current Min: " << minStack.getMin() << endl; // 应输出 -2

    return 0;

    return 0;
}
相关推荐
Westward-sun.18 小时前
OpenCV + dlib 人脸关键点检测学习笔记(68点)
人工智能·笔记·opencv·学习·计算机视觉
_日拱一卒18 小时前
LeetCode:240搜索二维矩阵Ⅱ
数据结构·线性代数·leetcode·矩阵
WolfGang00732118 小时前
代码随想录算法训练营 Day33 | 动态规划 part06
算法·leetcode·动态规划
高冷的上官梓芸18 小时前
【A15】默认关闭屏保
java
爱学习的小囧18 小时前
嵌套式 ESXi 8.x/9.0 虚拟设备下载与实战指南
java·linux·运维·服务器·虚拟化
米粒118 小时前
力扣算法刷题 Day 41(买卖股票)
算法·leetcode·职场和发展
五阿哥永琪18 小时前
从零读懂 Java 函数式接口:Function、Consumer、Supplier、Predicate
java·开发语言
533_18 小时前
[vxe-table] 表头:点击出现输入框
android·java·javascript
天若有情67318 小时前
颠覆C++传统玩法!Property属性与伪类,开辟静态语言新维度
java·c++·servlet
硅基导游18 小时前
linux系统与进程内存使用情况探测
java·linux·运维