LeetCode Hot100(51/100)——155. 最小栈

前端JavaScript力扣HOT100刷题【51-100】 注:纯手打,如有错误欢迎评论区交流!编写此文是为了更好地学习前端知识,如果损害了有关人的利益,请联系删除!本文章将不定时更新,敬请期待!!!!! 阅读详情

一、题目描述

题目链接:LeetCode CN - Min Stack

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

实现 MinStack 类:

  • MinStack() 初始化栈对象。
  • void push(int val) 将元素 val 压入栈中。
  • void pop() 删除栈顶元素。
  • int top() 获取栈顶元素。
  • int getMin() 检索栈中的最小元素。

所有操作的时间复杂度均需为 O(1)。


二、思维导图梳理

Min Stack

设计要求

push(val)

pop()

top()

getMin()

时间复杂度 O(1)

解法思路

方法一:辅助最小栈

方法二:使用栈存储差值

方法三:仅使用一个栈记录元组

分析维度

时间复杂度

空间复杂度

栈操作流程


三、解法原理剖析

方法一:使用辅助最小栈

为了在 O(1) 时间内得到最小值,我们可以使用两个栈:

  • 数据栈(dataStack):正常存储入栈的数据。
  • 最小值栈(minStack):同步记录对应位置的最小值。
思路解析
操作dataStackminStack
push(5)[5][5]
push(3)[5, 3][5, 3](3是当前最小值)
push(7)[5, 3, 7][5, 3, 3](3仍是最小)
pop()[5, 3][5, 3]
getMin()返回 minStack 栈顶元素 3

每次压入新值时,minStack 栈顶保存的是当前所有元素的最小值。


方法二:仅使用一个栈,记录差值

可以只用一个栈,通过记录当前值与最小值的差来避免使用双栈。

  • 记录最小值 min
  • 压栈时存储差值:val - min
  • 当压入比当前最小值更小的元素时,特别更新最小值。

这种方式比较巧妙,但对负差值的计算要格外注意,因此一般更推荐双栈法。


方法三:同栈存储元组 (val, minVal)

每个栈元素同时记录当前值和当前最小值,此时只需一个栈,每次压入:

栈顶元素 = [当前值, 当前最小值]

取最小值时读取栈顶元素的第二个字段即可。


四、操作流程图

以下是“辅助最小栈”解法的流程示意:

是

否

是

否

开始

push(val)

minStack 是否为空?

minStack.push(val)

val < minStack.top()?

minStack.push(val)

minStack.push(minStack.top())

dataStack.push(val)

结束


五、复杂度分析

操作时间复杂度空间复杂度
pushO(1)O(n)
popO(1)O(n)
topO(1)O(n)
getMinO(1)O(n)

时间复杂度始终保持常数级,空间由于维护辅助栈为线性级。


六、Java 解法代码

下面是实现完整的双栈版本代码:

class MinStack {
    private Stack<Integer> dataStack;
    private Stack<Integer> minStack;

    public MinStack() {
        dataStack = new Stack<>();
        minStack = new Stack<>();
    }

    public void push(int val) {
        dataStack.push(val);
        if (minStack.isEmpty() || val <= minStack.peek()) {
            minStack.push(val);
        } else {
            minStack.push(minStack.peek());
        }
    }

    public void pop() {
        dataStack.pop();
        minStack.pop();
    }

    public int top() {
        return dataStack.peek();
    }

    public int getMin() {
        return minStack.peek();
    }
}

七、总结

特性描述
设计思路用辅助栈同步记录最小值
优点操作简单,逻辑清晰,性能稳定
缺点空间使用略多
时间复杂度O(1)
空间复杂度O(n)
LeetCode HOT-100 分类总结 阅读详情

相关推荐

代码随想录算法训练营 hot100 回溯算法

回溯算法理论基础状态:√状态:√类别:回溯难度:mid状态:√类别:回溯难度:mid状态:×类别:回溯难度:mid状态:√类别:回溯难度:mid状态:×类别:回溯难度:midleetcode链接:​​​​​​​​​​​​​​状态:×类别:回溯难度:midleetcode链接:​​​​​​​状态:×类别:回溯难度:midleetcode链接:​​​​​​​状态:√类别:回溯难度:midleetcode链接:​​​​​​​​​​​​​​状态:√类别:回溯难度:mid。

weixin_47495480的博客 898

力扣hot100

【代码】力扣hot100。

qq_59768361的博客 1404

LeetCode Hot 100 Python (51~60)

LeetCode Hot 100 第51~60题的Python实现

朝花夕拾。 1106

Hot 100总结【leetcode】

leetcode hot100总结

weixin_44911248的博客 6641

Bochs源码分析 - 26:8259中断控制器介绍

前言 现在我们跟着《x86/x64体系探索及编程》来分析17章内容 -- 8259中断控制器。这个是涉及硬件的,很遗憾,除了大学期间使用STM32搞过一个计算器,其余就没多少硬件编程经验,我在淘宝上找了下大概是这个东东。 https://pdos.csail.mit.edu/6.828/2010/readings/hardware/8259A.pdf 上面是8259A的芯片手册,里面讲的还是挺详细的,虽然里面很多东西还是看不太懂,但是结合着《x86/...

WriteAnything_的博客 971

RS422总线

①.RS422发送驱动器无高阻三态(浮空)状态RS422收发芯片,发送脚固定强驱动输出,永远钳位 A/B 差分电平,不能关断、不能悬空,只要芯片上电,TX+、TX - 就强制输出互补电压(一路高、一路低)。多条发送并联在同一组差分线上:两个驱动器一个拉 A 高、一个拉 A 低,B 线反向拉扯 → 电源→地大电流对灌,瞬间芯片过流发烫烧毁、总线电平短路错乱。注意:RS485 带DE/RE 收发使能脚:不用发送时可关闭驱动器,输出变成高阻浮空,让出总线,因此能多节点分时发送。③.多点通信方式,一主多从方式;

zhuimeng_1234的博客 223

力扣 hot100 -- 技巧

只出现一次的数字,多数元素,颜色分类,下一个排列,寻找重复数

IT OR 考公? 1648

从战略到执行:业务领先模型 BLM 的第一把钥匙「差距分析」

业务领先模型「BLM」(Business Leadership Model),俗称“别乱摸”,起源于哈佛商学院的战略理论研究,是一套完整的战略规划方法论。 后来被 IBM 发扬光大,IBM 在转型关键时期完成了对 BLM 模型的导入和创新,从此这个模型成为 IBM 中高层用于战略制定与执行联接的方法与平台。 再到后来华为花巨资引入了 BLM 模型,经过多年的应用,将其演化成了公司战略规划和落地的主要方法与流程,也因此被中国科技企业所认识和接受。 BLM 模型可以解决哪些问题? 在企业内,

产品线负责人 2403

力扣hot100——图论

力扣hot100刷题之图论

qq_65507629的博客 1349

内存越界一定会导致程序崩溃吗?详解内存越界

本文详细解释了内存越界不一定导致内存越界的问题,全面介绍了C++内存越界的相关内容。

dvlinker的技术专栏 2万+

华为OD机试 - 小火车最多人时所在园区站点(Java 2024 E卷 100分)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 996

力扣Hot100——169. 多数元素

当遍历选票时,第一次我们将第一张票作为 candidate 的值,然后遍历,遇到相同的票 count +1,否则 -1,当 count == 0,就将下一张票作为候选人 candidate,如此遍历至最后,candidate 的 count!= 0的 candidate一定是票数最多的 candidate,也就是所有票中的众数。(原因就是上面的众数 + 非众数 count 结果一定大于零)首先明白一点:将众数标记为 +1,非众数标记为 -1,遍历所有数值后,众数的和一定是大于零的,因为众数有过半的票数。

m0_55329111的博客 1066

QGis软件 —— 9、QGis - 由点绘制热力图来模拟人流量(绘制点方式、excel导入数据方式)

QGis软件 —— 9、QGis - 由点绘制热力图来模拟人流量(绘制点方式、excel导入数据方式)

1472

力扣Hot100题单个人计划c++版(三)

力扣Hot100题单个人计划c++版(一) 力扣Hot100题单个人计划c++版(二) 刷题链接:力扣Hot 100 每日一题,每日一更,白板手写。 力扣Hot 10041.二叉树的层序遍历 41.二叉树的层序遍历 10.11打卡 层序遍历很基础的算法了,按照每层返回一个vector的话,一开始想到用两个队列循环取每一层和下一层,然后在转成vector,当然题解更巧妙的做法是记住每层的大小即可。 class Solution { public: vector<vector<int&

长门yuki 1140

【Unity 实用工具篇】 | 滚动列表插件FancyScrollView,快速上手使用

FancyScrollView 是一款专为Unity引擎开发的高效滚动列表组件。它具有轻量级、可定制性强、性能优秀等特点。 使用FancyScrollView插件进行Unity项目开发,可以极大提升开发效率,尤其是在需要大量列表展示的场景下,如商城、目录列表、角色选择界面等。开发者可以将注意力集中在业务逻辑的实现上,而将界面渲染和交互部分交由FancyScrollView处理。 本文来介绍一下FancyScrollView的功能展示和基本使用方法。

努力前行,总会成为自己心中的那道光 3万+

16、天文时间序列分类:基于人工神经网络的研究

本研究探讨了基于人工神经网络的天文时间序列分类方法,重点比较了MLP、LSTM和CNN等模型在BRITE和开普勒K2数据集上的表现。研究发现LSTM不适用于此类数据,而结合特征提取与PSO超参数优化的多层感知器(MLP)在开普勒K2数据上实现了98.55%的二分类准确率。通过精细的数据预处理和高置信度样本选择,显著提升了分类性能。研究成果为恒星变异性识别提供了高效工具,并对天文学与机器学习交叉领域具有重要参考价值。

pz8901234的博客 113

力扣hot100做题整理51-60

path.stream().mapToInt(Integer::intValue).sum() 集合求总和。3.初始化二维数组int[][] dirs = {{-1,0},{1,0},{0,-1},{0,1}};append(增加元素) deleteCharAt删除元素 length()长度。1.定义一个广度搜索函数,计算以某个点为起始节点的岛屿数量。广度遍历每个入队元素上下左右,有新鲜的橘子就腐烂。统计新鲜的橘子,腐烂的橘子入队列。腐烂后加入队列中,腐烂时间+1。for + 递归实现。

aloha 578

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

力扣Hot100疑难杂症汇总

这一篇博客主要用来记录中我反复刷,但又反复错的难题,为了防止秋招手撕的时候尬住,写这篇博客记录一下那些容易遗忘而且对我来说难度较大的题目。后面复习的时候重点对着这个名单来刷题。

weixin_52151595的博客 481

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LeetCode HOT 100刷题总结

文章目录1 哈希1.1 1-1.两数之和🟢1.2 2-49.字母异位词分组🟡1.3 3-128.最长连续序列🟡2 双指针2.1 4-283.移动零🟢2.2 6-15.三数之和🟡2.3 7-11.盛最多水的容器🟡2.4 8-42.接雨水🔴3 滑动窗口3.1 9-3.无重复字符的最长子串🟡3.2 10-438.找到字符串中所有字母异位词🟡4 子串4.1 11-560.和为 K 的子数组🟡5 矩阵5.1 73.矩阵置零🟡6 链表6.1 23-160.相交链表🟢6.2 24-206.反转链表🟢🔥6.3 92.反转链

夏日 の blog 1915

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

LeetCode HOT100刷题笔记(十):回溯

ps:笔记和代码按本人理解整理,重思路

学习记录 1298

LeetCode 热题 HOT 100 完整题解笔记&知识点分类 C++代码实现

1、知识点分布 2、完整代码

小哈里的博客 1万+

两天速通力扣HOT100[DAY1] (1~54)

本题解旨在以最简单的语言总结hot100各题思路,为每一题提供一个思考入口,但想要手撕出来,需要自己认真推理细节。

WynnLu的博客 1402

Leetcode Hot100 51-55

细节:添加path的时候需要new创建一个新的值,因为是值传递,只传path,会都指向该地址。当回溯对象是固定时,for遍历只需遍历固定元素。1.不是组合,递归的时候是begin+1。2.用String数组存储电话号。

Tom336853的博客 285

LeetCode Hot100(51-60)算法精解与面试技巧

算法题解是程序员面试准备的核心环节,尤其以动态规划、回溯算法和贪心算法为代表的经典解题思想尤为重要。动态规划通过将复杂问题分解为子问题来优化求解效率,回溯算法则采用试错思想系统搜索解空间,而贪心算法通过局部最优选择逼近全局最优解。这些算法在LeetCode Hot100高频题库中体现尤为明显,例如N皇后问题展现了回溯的典型应用,最大子数组和则是DP入门必做题。掌握这些算法不仅能提升解题能力,更能培养工程实践中的系统思维。本文以Hot100(51-60)为例,详解其中包含的矩阵操作、区间合并等高频考点,并分享

weixin_33787529的博客 405

力扣hot100 -- 哈希

两数之和,最长连续序列,字母异位词分组

IT OR 考公? 1404

【Leetcode hot 100】51.N皇后

摘要: N皇后问题要求在n×n棋盘上放置n个皇后,使其互不攻击(同行、同列、同斜线)。本文通过回溯法解决该问题:逐行尝试放置皇后,确保当前位置合法(无同列及同斜线冲突),递归处理下一行,成功放置后记录解并回溯。Java代码实现中,使用char[][]表示棋盘,通过isValid快速校验合法性,最终转换为List<String>格式输出。时间复杂度为O(n!*n),空间复杂度为O(n²),适用于n≤9的约束条件。

专注Java和MySQL领域知识分享 1090
上一篇: LeetCode Hot100(50/100)——153. 寻找旋转排序数组中的最小值
下一篇: LeetCode Hot100(52/100)——394. 字符串解码
梨梨(AI版)
博客等级 码龄8年 1万+粉丝 225原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梨梨(AI版)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值