当前位置: 首页 > news >正文

LeetCode[中等] 155. 最小栈

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

实现 MinStack 类:

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

 思路:

若栈中元素为 b c d,a进栈,则只要a在栈中,b c d 就一定在栈中(a出栈之前,b c d 一定不会出栈),因此,a为栈顶一定对应一个最小元素

利用辅助栈,将元素栈同步插入与删除,用于存储与每个元素对应的最小值:

  • 栈顶存储栈内最小元素
  • 新元素入栈时,将当前辅助栈的栈顶存储的最小值 与 当前元素进行比较,从而更新栈顶最小值
public class MinStack {Stack<int> stack;Stack<int> minStack;public MinStack() {stack = new Stack<int>();minStack = new Stack<int>();}public void Push(int val) {stack.Push(val);if (minStack.Count > 0 && val > minStack.Peek()) {minStack.Push(minStack.Peek());}elseminStack.Push(val);}public void Pop() {stack.Pop();minStack.Pop();}public int Top() {return stack.Peek();}public int GetMin() {return minStack.Peek();}
}

复杂度分析

  • 时间复杂度:构造方法和每一项操作的时间复杂度都是 O(1)。
  • 空间复杂度:O(n),其中 n 是元素个数。空间复杂度主要取决于栈空间,常规栈和最小元素栈的空间都是 O(n)。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • React组件如何暴露自身的方法
  • Python | Leetcode Python题解之第415题字符串相加
  • Navicate 链接Oracle 提示 Oracle Library is not loaded ,账号密码都正确地址端口也对
  • Ubuntu LLaMA-Factory实战
  • 【鸿蒙】HarmonyOS NEXT星河入门到实战8-自定义组件-组件通信
  • 机器学习_神经网络_深度学习
  • [OpenGL]使用OpenGL绘制带纹理三角形
  • 【深度学习|可视化】如何以图形化的方式展示神经网络的结构、训练过程、模型的中间状态或模型决策的结果??
  • Compiler Explorer 开源项目-在线编译器网站
  • 9.3Otsu阈值分割
  • 使用Django 搭建自动化平台
  • 项目实战 (15)--- 代码区块重构及相关技术落地
  • (k8s)kubernetes 部署Promehteus学习之路
  • [Redis][List]详细讲解
  • Elasticsearch 应用实战:从基础到高级实践
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • AWS实战 - 利用IAM对S3做访问控制
  • express + mock 让前后台并行开发
  • LeetCode18.四数之和 JavaScript
  • leetcode386. Lexicographical Numbers
  • Median of Two Sorted Arrays
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • vue自定义指令实现v-tap插件
  • 深入浏览器事件循环的本质
  • 实习面试笔记
  • 怎么把视频里的音乐提取出来
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (11)MATLAB PCA+SVM 人脸识别
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (7)STL算法之交换赋值
  • (done) 两个矩阵 “相似” 是什么意思?
  • (二)斐波那契Fabonacci函数
  • (一)Linux+Windows下安装ffmpeg
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)Sublime Text3配置Lua运行环境
  • (转载)hibernate缓存
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Core 中插件式开发实现
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .net项目IIS、VS 附加进程调试
  • .NET中两种OCR方式对比
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • @Async注解的坑,小心
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [20150904]exp slow.txt
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯