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;
}
相关推荐
一只小菜鸡..1 小时前
Stanford CS144 学习笔记 (四):网络拥塞控制与 AIMD 算法
网络·笔记·学习
Hammer_Hans1 小时前
DFT笔记82
笔记
接着奏乐接着舞1 小时前
大模型开发 agent 知识库
java
xuhaoyu_cpp_java2 小时前
SpringBoot学习(四)
java·经验分享·spring boot·笔记·学习
依然范特东2 小时前
动手学深度学习笔记--训练注意、梯度问题
人工智能·笔记·深度学习
plainGeekDev2 小时前
kapt 替换为 KSP
android·java·kotlin
蜡台2 小时前
通过Gradle脚本声明更改Java变量
android·java·开发语言·python·kotlin·gradle·groovy
程序员天天困3 小时前
后端视角看 EventBus:发布订阅总线的原理、场景与用法
java·后端
要开心吖ZSH3 小时前
AI医疗分诊与健康咨询助手agent开发——(4-2)从零到一:我给AI医疗分诊助手加了个“知识库大脑“,终于搞懂了RAG是什么
java·docker·agent·医疗·rag
AI人工智能+电脑小能手3 小时前
【大白话说Java面试题 第179题】【07_Redis篇】第15题:什么是 Redlock 算法?
java·redis·分布式锁·高可用·redlock