最小栈的实现与优化
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,最小栈实现一个最小栈,一步一步优化,从额外空间O(N) 到O(1) 。面试官看重代码逻辑。push,pop,top,getMin都是O(1)时间。1 用一个最小栈来存储最小值1.1要点:2个栈,dat
千家信息网最后更新 2025年01月22日最小栈的实现与优化
最小栈
实现一个最小栈,一步一步优化,从额外空间O(N) 到O(1) 。面试官看重代码逻辑。push
,pop
,top
,getMin
都是O(1)时间。
1 用一个最小栈来存储最小值
1.1要点:
2个栈,data用来存储数据,minValue用来存储最小值。
push
时,data直接push
数据;minValue直接放入当前最小的值。(对于minValue有一个优化,当push
的数据比当前最小值大的时候,我们可以不对minValue进行最小值的插入;如果小于或者等于最小值,就需要把最新的最小值push
入栈minValue。pop
时,data直接pop
出数据;同时,更新minValue,更新的策略是与push
中的优化对应的策略--pop
出的数,如果==当前的最小值,就需要把minValue进行pop
一次。getMin
:直接返回栈minValue 的 top元素即可。top
: 直接返回栈data的top元素即可。
1.2 复杂度和代码
额外空间消耗O(N)
,如何优化到O(1)
.
public class MinStack1 { private Stackdata = new Stack (); private Stack minValue = new Stack (); public void push(int x) { data.push(x); if (minValue.isEmpty() || x <= minValue.peek()) minValue.push(x); } public void pop() { int value = data.pop(); if (value == minValue.peek()) minValue.pop(); } public int top() { return data.peek(); } public int getMin() { return minValue.peek(); }}
2 优化空间复杂度到O(1)
如何只用一个栈实现最小栈的实现?
栈不能够只存储原始数据,应该存储差值。
用一个变量来计算栈的最小值
用简单的示例来探索思路。
2.1 图
入栈顺序:2,1,3,4,-2,0,-2
diff栈的计算 = data - min
出栈的data | 最小值 | diff栈 | 最小值min | |
---|---|---|---|---|
2 | 2 | 0 | 2 | |
1 | 1 | -1 | 1 | |
3 | 1 | 2 | 1 | |
4 | 1 | 3 | 1 | |
-2 | -2 | -3 | -2 | |
0 | -2 | 2 | -2 | |
-2 | -2 | 0 | -2 |
top
: 如何根据diff栈来恢复栈顶top的元素?push
: 如何更新min最小值?pop
: 如何维护min的最小值?
2.2 代码
注意:第一次入栈diff的特殊处理。
public class MinStack3 { private Stackdiff = new Stack (); private int minValue; public void push(int x) { if (diff.isEmpty()) { minValue = x; diff.push(0); } else { int compare = x - minValue; diff.push(compare); minValue = compare < 0 ? x : minValue; } } public void pop() { int top = diff.peek(); minValue = top < 0 ? (minValue - top) : minValue; diff.pop(); } public int top() { int top = diff.peek(); return top > 0 ? top + minValue : minValue; } public int getMin() { return minValue; }}
新航道雅思
最小
数据
存储
代码
元素
空间
更新
复杂
复杂度
策略
不对
原始
特殊
变量
同时
差值
思路
时候
时间
示例
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
华淼网络技术服务
完美世界平台链接服务器失败
hcna网络技术
部队网络安全个人反思材料
国内颜料数据库
12C数据库配置监听
基础数据库建设方案
开源 流媒体 服务器
关于内网打印机网络安全问题
紧绷网络安全的xuan
安全生产网络安全台账
江阴进口网络技术代理价格
广东绿色生鲜配送软件开发
我市对学生进行网络安全教育
网络安全责任分配基本原则
网络安全简单手抄报二年级
分析型关系数据库
服务器是哪种类型
台式电脑怎么制作服务器
服务器 问题
mac软件开发+鼠标监控
华为和戴尔服务器
服务器可以和粉丝一起用吗
it软件开发工作
主播游戏如何更改服务器
智慧后勤 网络安全
新游网络安全海报
信息网络技术企业组织变革
java 应用程序服务器
北京微电商软件开发