维护O(1)时间查找最大元素的栈

本文介绍了如何创建一个类,通过维护两个栈S1和S2,来实现在O(1)时间内查找栈内的最大元素。S1用于正常push和pop操作,S2则用于保存当前的最大值。当新元素大于S2栈顶元素时,同时将新元素push到S1和S2;否则,仅push到S1。出栈时,若S1和S2栈顶元素相同,则S2栈顶元素即为最大值,一同出栈。
摘要由CSDN通过智能技术生成
问题描述:一个栈stack,具有push和pop操作,其时间复杂度皆为O(1)。设计算法max操作,求栈中的最大值,该操作的时间复杂度也要求为O(1)。 可修改栈的存储方式,push,pop的操作,但是要保证O(1)的时间复杂度,空间时间复杂度无要求。


创建一个类,类里有两个栈,一个栈S1维持正常的push、pop操作,另一个S2保存当前的最大值。

其实我觉得理解好题目是非常重要的,求最大值,想来想去无论怎么样时间复杂度也得为O(n)吧,但是题目并不是这个意思,而是在已有的操作上,进行一步操作,就可以得到最大值。那么这就好做了。

S1:1  2  5  4  3  2  9

S2:5  9

进栈的元素时候如果为比S2的栈顶要大,则为最大值,同时push S1 and S2。否则,只进栈S1(S1为原始栈)。

同样,出栈的时候,直接检查S2和S1的是否

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值