实现一个栈, 其 Push,Pop,Min 操作的 时间复杂度 均为 O( 1 )

1.实现一个栈, 要求 : Push, Pop, Min 操作的 时间复杂度 均为 O( 1 ).思路: 首先, 我们先否定一种思路: 用一个变量保存每次入栈后 栈中最小值, 这种思路的问题在于, 第一次返回最小值是正确的, 可是这个最小值被 Pop 掉后, 次小值如何获得呢.接着 我想到了 ,用数组保存 每个元素, 每次元素入栈时进行比较 , 按降序 排序, 后来发现这种思路 既麻烦又没有必要
摘要由CSDN通过智能技术生成
 

1.实现一个栈, 要求 : Push, Pop, Min 操作的 时间复杂度 均为 O( 1 ).

思路: 首先, 我们先否定一种思路: 用一个变量保存每次入栈后 栈中最小值, 这种思路的问题在于, 第一次返回最小值是正确的, 可是这个最小值被 Pop 掉后, 次小值如何获得呢.接着 我想到了 ,用数组保存 每个元素, 每次元素入栈时进行比较 , 按降序 排序,  后来发现这种思路 既麻烦又没有必要

我们用一个 辅助栈 minS 来保存 最小值, 一共有两个栈 dataS 栈 和 minS 栈, minS 栈用来实现 Min( ) Fun 功能

我们给 一组数据 即可明白  假如入栈序列:

栈底  ->    1226 521 626 8 2 6 7 1 9   <- 栈顶   从 1226  --->   9  元素分别入栈 dataS  下面我们分析 dataS 的元素入栈情况:

我们进行分析:   首先   我们从开始 进行分析  开始入栈 1226 为最小元素  入 minS 栈,接着入栈 521 成为最小元素 ,入 minS 栈这时我们重点进行分析   626入栈 dataS后 此时最小元素 为 什么? 依然为521  假设现在 dataS 栈中只有 三个元素  1126 521 626  在元素 521 出栈前, Min函数 返回值为 521  也就是说 ,只要
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值