实现一个返回最小值的栈
来源:互联网 发布:tpshop 小程序源码 编辑:程序博客网 时间:2024/05/22 14:52
一、 实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作) 的时间复杂度为O(1)
(1)栈的基本操作入栈(push);出栈(pop);查找栈顶(top);栈的元素个数(size);检查栈是否为空(empty);我们知道入栈(push)和出栈(pop)时间复杂度本身就为O(1);所以只要让Min(返回最小值操作)的时间复杂度为O(1)即可;
(2)Min(返回最小值操作)的时间复杂度为O(1);
我们可以建立一个辅助栈S2,用来存放主栈S1中最小的元素;
★使用两个栈,s1,s2,先将第一个元素同时对s1,s2入栈,然后接着对s1入栈,将s1入栈的元素和s2.top比较,假如s2.top大于入栈元素,则把该元素对s2也入栈(☛s2.top和入栈元素相等时也要入栈S2);否则将下一个元素对主栈S1入栈,依次进行;
★出栈时,把s1出栈的元素和栈顶(s2.top)比较,相等就是最小值;同时s1,s2出栈,否则s1单独出栈。
二:图说
三:代码实现:
#include<iostream>#include<stack>using namespace std;template<typename T>class Stackmin{public: Stackmin() {} ~Stackmin() {} void Push(T data) { s1.push(data); if (s2.empty()||s2.top()>=data)//此处要注意s2.top()>=data也要入栈S2,防止连续相等元素出现 { s2.push(data); } } void Pop() { //删除S1栈顶元素的时候,如果s1.top()==s2.top()相等,S2栈顶元素也必须删除,更新栈中剩下元素的最小值 if (s1.top()==s2.top()) { s2.pop(); } s1.pop(); } void Min() { if (!s2.empty()) { cout<<"最小值:"<<s2.top()<<endl; } }private: stack<T> s1, s2;};
测试代码:
int main(){ Stackmin<int> s; s.Push(3); s.Push(2); s.Push(6); s.Push(5); s.Push(1); s.Push(7); s.Min(); s.Pop(); s.Pop(); s.Min(); return 0;}
四:运行结果:
☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺☺
0 0
- 实现一个返回最小值的栈
- 实现一个栈,要求Push/Pop/Min(返回最小值)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push、Pop、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个出栈,入栈,返回最小值的操作的时间复杂度为O(1)的栈
- Min Stack:实现能返回最小值的栈
- 实现一个栈Stack,Push、Pop、Min(返回最小值的操作)的时间复杂度为O(1)
- 构建一个栈,并返回其最小值
- 实现一个栈stack,push出栈,pop入栈,min返回最小值
- 【栈队列】实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 栈--实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 【数据结构】实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- ~实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)~
- 剑指offer 21---实现一个栈, 要求实现Push( 出栈) 、 Pop( 入栈) 、 Min( 返回最小值的操作) 的时间复杂度为O(1)
- 1. 实现一个栈,要求实现 Push (出栈)、 Pop (入栈)、 Min (返回最小值的操作) 的时间复杂度为 O(1)
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 结构体
- Spark入门实战系列--8.Spark MLlib(上)--机器学习及SparkMLlib简介
- 金山wps2017校招笔试(前端A卷)
- C# 服务器,客户端 1:N模式
- 基于Ubuntu Core系统的DragonBoard 410c开发案例解析
- 实现一个返回最小值的栈
- Android 数据存储方案
- android高仿微信视频编辑页-视频多张图片提取
- Mac添加环境变量及Homebrew的安装
- 奔跑吧Pedometer
- 08-java代码块,继承,方法重写,final关键字
- 用IntelliJ IDEA提交pyspark程序
- Day-1
- PAT-A-1092. To Buy or Not to Buy (20)