栈在O(1)时间内求min值

本文介绍了两种在O(1)时间复杂度内求栈中最小值的方法。第一种方法是在栈结构中增加min和second字段,每次push和pop时更新这两个字段以保持最小值的正确性。第二种方法是使用辅助栈ass,记录每个状态下的最小值,push和pop时比较并更新辅助栈,确保min操作也在O(1)时间内完成。
摘要由CSDN通过智能技术生成

思路:1:在stack的数据结构中加两个个字段,如 

typedef struct { 


       int data[MAX];   // 存储栈中的所有数

       int top;   // 存储栈顶元素在data数组中的位置

       int min;  // 最小值

       int second;  // 次小值

}stack; 

pop,push的时候都去栈顶元素,所以是O(1) 

min的时候取stack的min字段,所以也是O(1) 

每次push的时候进行比较,如果当前push的元素比stack->min小,则用当前元素替换stack->min,用原来的min替换second。如果当前push的元素比stack->min<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值