[栈] LeetCode 155. 最小栈

【中等】力扣算法题解析LeetCode155:最小栈 本文介绍了一种实现最小栈的高效方法,通过双栈结构在常数时间内完成所有操作。主栈存储所有元素,辅助栈(最小栈)存储非严格递减的最小值序列。关键操作包括:push时同步更新最小栈,pop时检查是否需要弹出最小栈栈顶。该方法保证了push、pop、top和getMin均为O(1)时间复杂度,且空间优化显著。附Java代码实现及示例说明,适合面试高频题快速掌握。 阅读详情
155. 最小栈

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

  • push(x) —— 将元素 x 推入栈中。
  • pop() —— 删除栈顶的元素。
  • top() —— 获取栈顶元素。
  • getMin() —— 检索栈中的最小元素。

示例 1:

输入:
["MinStack","push","push","push","getMin","pop","top","getMin"]
[[],[-2],[0],[-3],[],[],[],[]]

输出:
[null,null,null,null,-3,null,0,-2]

解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.getMin();   --> 返回 -2.

提示:

  • pop、top 和 getMin 操作总是在 非空栈 上调用。

思路一:辅助栈

  • 元素入栈时,我们取当前辅助栈的栈顶元素与当前入栈元素比较得出最小值,将这个最小值插入辅助栈中;
  • 元素出栈时,辅助栈的栈顶元素也一并弹出(与数据栈同步);
  • 因此辅助栈的栈顶存放的是当前栈内元素的最小值。
C++版本
class MinStack {
public:
    /** initialize your data structure here. */
    stack<int> s1,s2;
    MinStack() {
    }
    void push(int x) {
        s1.push(x);
        if(s2.empty()) s2.push(x);
        else s2.push(min(x,s2.top())); 
    }
    void pop() {
        s1.pop();
        s2.pop();
    }
    int top() {
        return s1.top();
    }
    int getMin() {
        return s2.top();
    }
};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack* obj = new MinStack();
 * obj->push(x);
 * obj->pop();
 * int param_3 = obj->top();
 * int param_4 = obj->getMin();
 */
Python版本
class MinStack:

    #辅助栈与数据栈同步
    def __init__(self):
        """
        initialize your data structure here.
        """
        self.data = []
        self.min_stack = []

    def push(self, x: int) -> None:
        self.data.append(x)
        if len(self.min_stack) == 0 or x <= self.min_stack[-1]:
            self.min_stack.append(x)
        else:
            self.min_stack.append(self.min_stack[-1])

    def pop(self) -> None:
        self.data.pop()
        self.min_stack.pop()

    def top(self) -> int:
        return self.data[-1]

    def getMin(self) -> int:
        return self.min_stack[-1]


# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(x)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.getMin()

思路二:使用pair<int,int>同时保存栈内元素和栈内的最小值

C++版本
class MinStack {
public:
    stack<pair<int,int>> st;
    /** initialize your data structure here. */
    MinStack() {

    }
    
    void push(int x) {
        if(st.empty()) st.push({x,x});
        else st.push({x,min(x,st.top().second)});
    }
    
    void pop() {
        st.pop();
    }
    
    int top() {
        return st.top().first;
    }
    
    int getMin() {
        return st.top().second;
    }
};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack* obj = new MinStack();
 * obj->push(x);
 * obj->pop();
 * int param_3 = obj->top();
 * int param_4 = obj->getMin();
 */
均值场博弈_平均场博弈(mean field game) The New Big Fish Called Mean-Field Game Theory原文链接http://www.science4all.org/article/mean-field-games/​www.science4all.org主要内容在经典博弈论中,它对附近其他鱼类的行为做出反应。这是非常复杂的,因为不同的鱼类之间会有大量的相互作用。这意味着经典博弈论对应于一长串高度耦合的方程。... 阅读详情

相关推荐

VisualStudio2022配置CGAL

vs2022和vs2017安装配置boost没什么区别,只需要注意boost的msvc得是14.3的,这玩意跟visualstudio版本挂钩的。压缩包解压,得到下面这两文件,然后把auxiliary这个文件挪到CGAL-5.6里面就行了。我用cgal读取一个stl模型,并输出相关信息(想可视化的话需要安装Qt,不想装Qt也可以装VTK)然后下载下面这两个压缩包。照着下面的截图填就完事了。

weixin_43850909的博客 1171

155.最小栈-力扣(LeetCode)

目录55.最小栈-力扣(LeetCode)正确题解优化题解1优化题解2 55.最小栈-力扣(LeetCode) ????155.最小栈-力扣(LeetCode) 题目描述:设计push、pop、top、getMin,函数,并且可以在时间复杂度为O(1)的情况下找出最小值 错误的思路:给定一个变量,来记录最小值,这种想法是错误的,我们应该要更全面的考虑问题。 当我们入栈{6,5,4,3,2,1}时,每次记录最小值的变量随着每次入栈而改变,当数据全部入栈,记录最小值的变量就为1,如果在不删除数据的情况下,可以

qq_53505979的博客 838

洛谷 P5736 【深基7.例2】质数筛

题目描述 输入 n(n\le100)n(n≤100) 个不大于 100000 的整数。要求全部储存在数组中,去除掉不是质数的数字,依次输出剩余的质数。 输入格式 无 输出格式 无 输入输出样例 输入 #1 复制 5 3 4 5 6 7 输出 #1 复制 3 5 7 板子题,使用一下线性筛 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using n

qq_37978559的博客 1117

力扣155题最全解法:如何实现支持常数时间获取最小值的最小栈(附详细图解和复杂度分析)

本文详细解读了力扣第155题“最小栈”,通过辅助栈法和使用栈中元素存储最小值法两种不同的解法,帮助读者深入理解如何高效地实现一个支持常数时间内获取最小值的栈。希望读者通过本文的学习,能够在力扣刷题的过程中更加得心应手。

10年数据\经营分析经验,现任大厂数据分析负责人 870

从零开始玩转机械臂:用Matlab+Robotics Toolbox实现四自由度机械臂运动仿真

本文详细介绍了如何利用Matlab及其Robotics Toolbox工具箱,从零开始构建并仿真一个四自由度机械臂。通过D-H参数建模、正向运动学验证、交互式操控以及轨迹规划等实践步骤,帮助初学者在虚拟环境中直观理解机器人运动学核心概念,为后续硬件实现奠定坚实基础。

weixin_29055699的博客 325

保姆级教程:用Docker快速部署mpromonet/webrtc-streamer实现WebRTC直播(附常见问题解决)

本文提供了一份详细的Docker部署mpromonet/webrtc-streamer的实战指南,帮助用户快速搭建WebRTC直播服务。内容涵盖从环境准备、基础部署到进阶配置与性能调优的全过程,并针对容器网络、视频流配置、跨网访问等常见问题提供了解决方案,旨在实现低延迟的流媒体传输。

dell8的博客 177

力扣hot100:155. 最小栈(栈,辅助栈存储相关信息)

我是夜空,你是星河,终于完整了,当有你来唱和

m0_63997099的博客 1572

【DaVinci Developer实战指南】从入门到精通:软件组件设计与配置全解析

本文详细解析了DaVinci Developer在汽车电子开发中的核心应用,从软件组件设计到配置实战,涵盖Application SWC创建、RunnableEntity设计及Exclusive Area配置等关键环节。通过实际案例分享,帮助开发者快速掌握AUTOSAR架构下的ECU软件开发技巧,提升工作效率与系统稳定性。

weixin_30952535的博客 250

力扣155(最小栈)

/ 栈顶指针(同时控制 data 和 minData)// 辅助栈:若栈空,直接压入;// 辅助栈:存「当前栈内最小元素」// 数据栈:存正常元素。// 同时为数据栈、辅助栈分配空间。

一本苦涩的书 1870

Vulkan入门系列3 - 绘制三角形代码解析(全)

【代码】Vulkan入门系列3 - 绘制三角形完整代码(带详细注释)

GPU全栈博主 1034

48、量子系统中的信源编码

本文深入探讨了量子系统中的信源编码理论与应用,详细介绍了盲编码与可见编码、定长编码与变长编码四种主要信源编码方案。文章从经典信源编码出发,对比分析了量子场景下的压缩特性,并系统性地阐述了量子定长信源编码的构建方法及相关定理证明。同时,讨论了通用量子定长信源编码的设计思路及其在实际应用中的优势与挑战。通过理论分析与实验进展的结合,为量子信息存储、传输和处理提供了重要的理论基础和技术支持。

m2n3b4v5c6的博客 100

155. 最小栈 - 力扣(LeetCode)

设计一个支持pushpoptop操作,并能在常数时间内检索到最小元素的栈。实现MinStackMinStack()void pop()int top()输入:输出:解释:--> 返回 -3.--> 返回 0.--> 返回 -2.topgetMinpushpoptopgetMin4。

Dubhehug的博客 483

DeerFlow 系列教程 第四篇 | Sandbox 沙箱与 Sub-agent 子智能体协作详解

DeerFlow 系列教程第四篇介绍了两个关键子系统:Sandbox 沙箱系统和Sub-agent子智能体协作机制。沙箱系统通过虚拟路径映射、权限白名单、命令审计和容器隔离四重机制,为Agent提供安全的代码执行环境,使其能在隔离环境中执行文件操作和脚本运行。系统采用分层架构设计,包含应用层、工具层、审计层等,核心是定义标准交互接口的抽象基类。虚拟路径系统将Agent操作的虚拟路径映射到实际路径,确保安全性。这些功能使DeerFlow从对话助手进化为能处理复杂任务的Super Agent平台。

weixin_43674738的博客 285

LeetCode 155. 最小栈

LeetCode 155. 最小栈 今天写题发现了一个很精妙的解法,在这里记录一下 首先看下题目描述: 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。 pop() —— 删除栈顶的元素。 top() —— 获取栈顶元素。 getMin() —— 检索栈中的最小元素。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/min-stack 示例: 输入: ["Mi

h799710的博客 322

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【算法】LeetCode 155—最小栈 - 详解与实现

本文介绍了如何实现一个在常数时间内检索最小元素的栈(MinStack)。通过使用双栈设计(普通栈+辅助最小栈),详细解析了push、pop、top和getMin操作的实现原理,并提供了完整的C++代码实现。文章强调当新元素≤当前最小值时同步压入最小栈,出栈时若栈顶等于最小值则同步弹出最小栈的优化策略,确保所有操作时间复杂度均为O(1)。该解法是栈结构经典的应用场景,适用于算法基础学习和面试准备。

qq_2778465975的博客 2039

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LeetCode 155题解 | 最小栈

最小栈

2401_87255690的博客 1111

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LeetCode-155. 最小栈【栈 设计】

即栈顶同时有值和栈内最小值,top()函数是获取栈顶的当前值,即栈顶元组的第一个值;getMin() 函数是获取栈内最小值,即栈顶元组的第二个值;题目要求在常数时间内获得栈中的最小值,因此不能在 getMin() 的时候再去计算最小值,最好应该在 push 或者 pop 的时候就已经计算好了当前栈中的最小值。每次新元素入栈时,要求新的栈内最小值:比较当前新插入元素 x 和 当前栈内最小值(即栈顶元组的第二个值)的大小。当栈不空,保存元组 (x, min(此前栈内最小值, x)))--> 返回 -3.

zik的博客 1029

leetcode155.最小栈,两个栈

leetcode155.最小栈,两个栈

热爱C++和golang的学生 876

力扣155. 最小栈(以空间换时间,使用辅助栈)

力扣155. 最小栈(以空间换时间,使用辅助栈) https://leetcode-cn.com/problems/min-stack/ 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。 pop()—— 删除栈顶的元素。 top()—— 获取栈顶元素。 getMin() —— 检索栈中的最小元素。 ...

小麦China的博客 313

Leetcode 热题100-155 最小栈

是一个简单的容器类模板,用于存储两个相关联的对象。它的主要用途是将两个值组合在一起,形成一个单独的实体。同时存储当前元素与其对应的栈中最小元素值。用以存储当前元素相对应的栈中最小元素值;方式二:类似于方法一,使用。方法一:创建一个辅助栈。

qewa132的博客 1221

golang力扣leetcode 155.最小栈

155.最小栈155.最小栈题解代码 155.最小栈 155.最小栈 题解 思路:两个栈,一个最小栈,push的时候如果不比最小的小,那么最小栈就接着push这个最小的数,这样就和pop形成了同步 代码 package main import "math" type MinStack struct { min []int stack []int } func Constructor() MinStack { return MinStack{} } func (this *MinStack)

清风 494

力扣解题-155. 最小栈

双栈法(第一次解答):逻辑清晰、易于维护,所有操作O(1)时间复杂度,是工程首选的经典解法;单栈对法:单栈存储“值+最小值”,逻辑紧凑,性能与双栈法持平,减少了一个栈的对象开销;差值法:极致空间优化(O(1)额外空间),但逻辑复杂、有溢出风险,适合对内存要求极高的场景;关键技巧:核心目标:通过“空间换时间”保证getMin()的O(1)时间复杂度;边界处理:重复最小值需用≤判断入栈,避免弹出时丢失最小值;健壮性:保留空栈异常处理,符合工业级代码规范。

qq_38261626的博客 378

LeetCode 155. 最小栈 | Python

使用辅助栈,根据栈先入后出的性质,解决《155. 最小栈》问题

"大梦三千秋的博客 963

Leetcode P155 最小栈

Leetcode P155 最小栈 题目 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) – 将元素 x 推入栈中。 pop() – 删除栈顶的元素。 top() – 获取栈顶元素。 getMin() – 检索栈中的最小元素。 示例: MinStack minStack = new MinStack(); minStack.push(-2);...

clownote 223

关于力扣LeetCode第155题最小栈

看题目还以为是要让自己设计一个栈的结构,结果官方题解里就是直接用的Stack。 我这里用链表实现了,输出正常,就是getMin方法可以优化一下,暂时这样了 class MinStack { private final List<Integer> valueList; private int nowTopLoction; public MinStack() { this.valueList=new LinkedList

weixin_43967331的博客 215

LeetCode 155:最小栈

LeetCode 155:最小栈题目描述解题思路代码实现总结 题目描述 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) – 将元素 x 推入栈中。 pop() – 删除栈顶的元素。 top() – 获取栈顶元素。 getMin() – 检索栈中的最小元素。 示例: MinStack minStack = new MinStack(); minSt...

香农三定律的博客 314
上一篇: [优先级队列] LeetCode 703. 数据流中的第 K 大元素
下一篇: [栈与队列] LeetCode 232. 用栈实现队列
心一QAQ
博客等级 码龄7年 23粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值