实现一个栈,要求pop push getMin的时间复杂度都是O(1)【图解流程】

本文介绍如何实现一个特殊栈,支持pop、push和getMin操作的时间复杂度均为O(1)。通过维护两个栈,一个用于数据,一个用于记录最小值,确保在保证基本栈操作的同时,能快速获取最小值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:https://blog.youkuaiyun.com/u010452388/article/details/81665826

完整题目:

实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。

【要求】

1. pop(弹栈)、push(入栈)、getMin操作的时间复杂度都是O(1)

2. 设计的栈类型可以使用现成的栈结构

实现思路

1.首先准备两个栈,一个是data栈,一个是min栈

2.第一数入栈的时候,data栈和min栈都插入这个数,后面再有数入栈的时候,data栈正常入栈,入min栈的时候,拿当前数与min栈栈顶的数比较,较小的数入min栈

3.弹栈的时候,data栈和min栈同时弹出栈顶数据

4.通过getMin获取最小值的时候,直接返回min栈的栈顶数即可(但是不弹出)

图解流程
首先准备两个空栈,data栈和min栈,入第一个数的时候,两个数同时入栈,如下图:

入第二个数6的时候,data栈正常入栈,但是,6入min栈之前,先与min栈的栈顶数进行比较,哪个数小就入到min栈,比较后发现,min栈原来的数5小,那么直接入5

 入第三个数3的时候,data栈正常入栈,3与min栈栈顶的5进行比较,3较小,则min栈入3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值