实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)

本文介绍如何实现一个栈Stack,使得Push、Pop和获取最小值(Min)的操作时间复杂度均为O(1)。通过维护两个栈,主栈_s1存储元素,副栈_s2记录主栈的最小值。在 Push、Pop 操作时,根据元素与副栈的关系调整副栈,确保_min的实时性。这种方法有效节省了空间并保证了高效性。
摘要由CSDN通过智能技术生成

1.【基础题】–1.实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)

解法:定义两个栈成员变量_s1和_s2, _s1作为主栈,存放该栈的元素;
_s2作为副栈,其中_s2的栈顶元素,记录主栈_s1当前所有元素中的最小值;
每当_S1中的元素出栈时,都要和_s2的元素做对比,如果_s1当前出栈的元素就是其当前_s1所有元素的最小值,即就是_s2的栈顶元素,那么_s1在栈顶出栈,此时_S1的栈中最小值已经改变;所以此时也要将_s2的最小值更新,将_s2的栈顶元素出栈;

在压栈的时候,第一次压栈,两个栈都为空,所以,给主栈压入元素时吗,副栈也压入元素;之后给主栈压栈,每次都要和副栈的栈顶元素做对比,如果压入的元素比副栈的栈顶元素小,那么说明此时主栈的最小值已经变为入栈的这个元素,那么副栈就要更新栈顶元素,确保将此时的主栈的最小值记录在副栈的栈顶;当遇到主栈压栈的元素比副栈栈顶元素大时,说明主栈压入该元素,主栈的最小值不会改变,所以副栈不用更新栈顶元素,不用压入元素;在这样副栈只压小的元素,不压大的元素,就会节省栈的空间利用


#include<iostream>
#include<stack>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值