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

【LeetCode刷题笔记】155.最小栈

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
更多算法知识专栏:算法分析🔥
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述
LeetCode题解专栏:【LeetCode刷题笔记】


目录

  • 题目链接
  • 一、题目描述
  • 二、示例
  • 三、题目分析
  • 四、代码实现(C++)

题目链接

LeetCode 155.最小栈

一、题目描述

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

  • MinStack() 初始化堆栈对象。
  • void push(int val) 将元素val推入堆栈。
  • void pop() 删除堆栈顶部的元素。
  • int top() 获取堆栈顶部的元素。
  • int 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.

三、题目分析

每个元素⼊栈时,需要当前栈中的最⼩值

每次将数据压入和弹出栈时最小值都有可能发生改变,这种改变会导致无法随时取得栈内的最小值

例如下图:当1弹出栈后,栈内最小值3无法取得,此时需要额外一个数据结构用来存储每个时刻的最小值
image.png
可以使⽤⼀个额外的栈minStk来记录栈中*每个元素⼊栈时的栈中的最⼩元素是多少,这样每次删除元素时就能快速得到剩余栈中的最⼩元素了

四、代码实现(C++)

class MinStack {
public:stack<int>st;stack<int>minstk;MinStack() {minstk.push(INT_MAX);}void push(int val) {st.push(val);if(val <= minstk.top() || minstk.empty()){minstk.push(val);}else{minstk.push(minstk.top());}}void pop() {      st.pop();minstk.pop();}int top() {return st.top();}int getMin() {return minstk.top();}
};/*** Your MinStack object will be instantiated and called as such:* MinStack* obj = new MinStack();* obj->push(val);* obj->pop();* int param_3 = obj->top();* int param_4 = obj->getMin();*/

image.png


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!
如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

相关文章:

  • 减速机振动相关标准 - 笔记
  • 鸿蒙HarmonyOS开发用什么语言
  • Python之PyCharm开发工具的安装与设置
  • for命令语句
  • 持久化存储 StorageClass
  • Python爬虫全解析
  • ACT、NAT、NATPT和EASY-IP
  • KafKa基本原理
  • LibreNMS:从docker出发
  • Arduino中以太网Udp通信
  • HarmonyOS NEXT:技术革新与生态挑战的交汇点
  • pytorch——豆瓣读书评价分析
  • 菜鸟学习日记(python)——匿名函数
  • 9. DashBoard
  • 使用Kaptcha实现的验证码功能
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • Java到底能干嘛?
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • mongo索引构建
  • 关于List、List?、ListObject的区别
  • 深度学习中的信息论知识详解
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • HanLP分词命名实体提取详解
  • ​io --- 处理流的核心工具​
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • # .NET Framework中使用命名管道进行进程间通信
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $GOPATH/go.mod exists but should not goland
  • (27)4.8 习题课
  • (ZT)一个美国文科博士的YardLife
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (新)网络工程师考点串讲与真题详解
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NetCore 如何动态路由
  • .NET命令行(CLI)常用命令
  • .NET设计模式(11):组合模式(Composite Pattern)
  • /dev/sda2 is mounted; will not make a filesystem here!
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试
  • [C++参考]拷贝构造函数的参数必须是引用类型
  • [CentOs7]图形界面
  • [CQOI 2010]扑克牌
  • [Docker]六.Docker自动部署nodejs以及golang项目
  • [HTML]Web前端开发技术12(HTML5、CSS3、JavaScript )——喵喵画网页
  • [Java] 模拟Jdk 以及 CGLib 代理原理
  • [LeetCode]-283. 移动零-1089. 复写零
  • [MySQL]日期和时间函数
  • [NBIoT]NBIoT相关知识
  • [nlp] id2str的vocab.json转换为str2id
  • [PTA]数组循环右移
  • [python]python os模块 常用命令