
155. 最小栈
主栈( 辅助栈(
发布日期:2021-05-06 11:08:49
浏览次数:25
分类:精选文章
本文共 1025 字,大约阅读时间需要 3 分钟。
MinStack是一种基于栈结构的数据结构,旨在高效实现数据的最小值查询和维护。该数据结构通过维护两个辅助栈来实现,其核心思想与传统的"栈最小值"问题类似,但具体实现方式有所优化。
核心数据结构
self.stack
):负责存储所有操作后的数据值。self.min_val
):用于记录当前有效的最小值,避免频繁遍历主栈查询。核心操作
初始化:
class MinStack(object): def __init__(self): self.stack = [] self.min_val = []
stack
用于存储所有插入的值。min_val
用于存储当前有效的最小值序列。
插入值:
def push(self, val): if not self.min_val or self.min_val[-1] >= val: self.min_val.append(val) else: self.min_val.append(self.min_val[-1]) self.stack.append(val)
- 当插入的值
val
小于或等于当前最小值时,直接将val
添加至min_val
。 - 否则,将当前最小值再次添加至
min_val
。 - 同时,将
val
加入主栈stack
。
弹出值:
def pop(self): self.min_val.pop() return self.stack.pop()
- 弹出当前最小值记录。
- 同时移除主栈的最后一个元素。
查看顶部:
def top(self): return self.stack[-1]
- 返回主栈的顶部元素。
获取最小值:
def getMin(self): return self.min_val[-1]
- 直接返回当前最小值。
优势分析
- 时间复杂度:每次插入和弹出操作均为 O(1),查询最小值为 O(1)。
- 空间复杂度:辅助栈
min_val
的空间复杂度为 O(N),主栈stack
的空间复杂度为 O(N)。
应用场景
该数据结构适用于需要频繁查询最小值但不希望每次查询都遍历整个数据集的场景,如网络流量监控、数据缓存等。
通过上述设计,MinStack 不仅实现了高效的值插入与弹出功能,还保证了对当前最小值的快速访问,充分发挥了栈数据结构的优势。
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月07日 18时53分08秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
js的严格模式
2019-03-06
idea的安装和无限期试用
2019-03-06
Oracle VM VirtualBox安装PVE虚拟机
2019-03-06
【转】如何用css限制文字长度,使溢出的内容用省略号…显示
2019-03-06
Android MediaPlayer setDataSource failed
2019-03-06
ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路
2019-03-06
【nodejs原理&源码杂记(8)】Timer模块与基于二叉堆的定时器
2019-03-06
大前端的自动化工厂(1)——Yeoman
2019-03-06
数据仓库建模方法论
2019-03-06
虚拟机搭建hadoop环境
2019-03-06
DataStax Bulk Loader教程(四)
2019-03-06
物联网、5G世界与大数据管理
2019-03-06
Cassandra与Kubernetes
2019-03-06
.NET应用框架架构设计实践 - 概述
2019-03-06
Rust 内置 trait :PartialEq 和 Eq
2019-03-06
Hibernate(十四)抓取策略
2019-03-06
[菜鸟的设计模式之旅]观察者模式
2019-03-06
Spring-继承JdbcDaoSupport类后简化配置文件内容
2019-03-06
Java基础IO流(一)
2019-03-06