算法题(38):最小栈

审题:

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

思路:

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

思路一:维护min变量

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

思路二:辅助栈(minsta)

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

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

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

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

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

解题:

155. 最小栈 - 力扣(LeetCode)

相关推荐
没书读了6 小时前
考研复习-数据结构-第六章-图
数据结构
future14129 小时前
C#进阶学习日记
数据结构·学习
ChoSeitaku12 小时前
NO.4数据结构数组和矩阵|一维数组|二维数组|对称矩阵|三角矩阵|三对角矩阵|稀疏矩阵
数据结构·人工智能·矩阵
Paper Clouds13 小时前
代码随想录|图论|15并查集理论基础
数据结构·算法·leetcode·深度优先·图论
Paper Clouds13 小时前
代码随想录|图论|14有向图的完全可达性
数据结构·算法·深度优先·图论·宽度优先
闻缺陷则喜何志丹14 小时前
【并集查找 虚拟节点】P1783 海滩防御|省选-
数据结构·c++·洛谷·并集查找·虚拟节点
7 9715 小时前
C语言基础知识--柔性数组
数据结构·算法
双叶83616 小时前
(C++)STL标准库(vector动态数组)(list列表)(set集合)(map键值对)相关对比,基础教程
c语言·开发语言·数据结构·c++·list
lifallen18 小时前
Flink Exactly Once 和 幂等
java·大数据·数据结构·数据库·分布式·flink
不二青衣1 天前
牛客网50题
数据结构·c++·算法