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;
}
相关推荐
Wang's Blog几秒前
Java 接入Redis: 五大数据类型与存储结构选型
java·服务器·redis
Wang's Blog4 分钟前
Java 接入Redis: 字符串与哈希类型操作命令
java·服务器·redis
智慧物业老杨4 小时前
物业数字化落地思考:真正的转型,是底层数据秩序的重构
java·大数据·人工智能·微服务·系统架构
星空7 小时前
金蝶苍穹build.gradle配置
java·build.gradle
步行cgn10 小时前
Spring 基于 XML 的自动装配:byName 详解
java·后端·spring
Navigator_Z10 小时前
LeetCode //C - 1252. Cells with Odd Values in a Matrix
c语言·算法·leetcode
大帅点兵10 小时前
Apache Ant 1.9.9 完整讲解
java
LuTshoes11 小时前
spring ai 实战 手搓 PlaneExecuteAgent
java·人工智能·spring·ai
这料鬼有毒11 小时前
二刷hot100-73.矩阵置零
java
caoerzhong11 小时前
JeeWMS 开源仓库管理系统二次开发与接口对接实战:Java WMS 如何与 ERP、MES 和自动化设备打通
java·开源