算法题(38):最小栈

审题:

这题需要我们实现一个可以在常数时间内检索到最小元素的栈

思路:

如果不限制时间复杂度,我们可以使用for循环遍历查找,但是这里限制了时间复杂度。

思路一:维护min变量

可以创建一个min变量,然后每次插入对象进去就和min进行比较,将较小的留给min。但是这存在一个大问题,一旦我们执行了pop函数,把min的数据删掉了,我们就无法获取当前最小的数了

思路二:辅助栈(minsta)

我们额外创建一个栈(minsta),它的目的是让栈顶保持为最小数据。

插入逻辑:一旦sta中插入了比minsta栈顶数据更小的数据,就往minsta中插入该数据。

删除逻辑:若sta删除的元素和minsta的栈顶元素值一样,那么minsta也需要删除栈顶元素

疑问:如果该数据和minsta栈顶数据一致还需要插入吗?

需要,因为如果最小数据存在两个以上,其中一个删除掉了,sta中仍然剩下该最小数据,若我们在minsta中只保存了一个该数据,那么删除之后minsta栈顶就不是最小数据了

解题:

155. 最小栈 - 力扣(LeetCode)

相关推荐
꧁细听勿语情꧂31 分钟前
二叉树余题,排序、直接插入排序、希尔排序
c语言·开发语言·数据结构·算法
是main不是漫1 小时前
【双指针|LeetCode1089 复写零】巧用逆向思路,破解原地覆盖陷阱
数据结构·算法·leetcode
饮水桶_T16 小时前
JAVA IO流笔记
开发语言·数据结构·算法
wo_jack1 天前
C++ 入门笔记(十七):list 入门 —— 为什么 list 不能 sort?
数据结构·c++·面试·stl·list
zaizai10071 天前
算法(左程云)1
数据结构
charliejohn1 天前
计算机考研 408 数据结构 图论-关键路径
数据结构·图论
David猪大卫2 天前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
vvilkim2 天前
数据结构类型、区别与应用场景:一篇讲透选型逻辑
数据结构
阿卡好可爱2 天前
Lua 热更新不生效:改完文件线上仍是旧逻辑,package.loaded 与 upvalue 重绑定详解
数据结构·分布式·后端·架构·lua