实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
来源:互联网 发布:网络骚扰电话怎么举报 编辑:程序博客网 时间:2024/05/19 03:21
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>#include<cassert>using namespace std;template<class T>class StackMin{public: void Push(const T& x)//压栈 { _s1.push(x); if (_s2.empty()) { _s2.push(x); } else { if (x>_s2.top()) { return ; } else//x<_s2.top() { _s2.push(x); } } } void Pop()//出栈 { assert(!_s1.empty()&&!_s2.empty()); if (_s1.top()==_s2.top()) { _s1.pop(); _s2.pop(); } else { _s1.pop(); } } const T& Min()//返回栈里面的最小值 { assert(!_s1.empty()&&!_s2.empty()); return _s2.top(); }private: stack<T> _s1;//主栈,存放栈的数据 stack<T> _s2;//副栈,这个栈的【栈顶】记录【当前栈里面元素的最小值】};int main(){ StackMin<int> s; s.Push(6); s.Push(2); s.Push(3); s.Push(1); s.Push(9); cout<<s.Min()<<endl;//1 s.Pop(); cout<<s.Min()<<endl;//1 s.Pop(); cout<<s.Min()<<endl;//2 s.Pop(); cout<<s.Min()<<endl;//2 s.Pop(); cout<<s.Min()<<endl;//6 //s.Pop(); //cout<<s.Min()<<endl; return 0;}
阅读全文
0 0
- 【栈队列】实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 栈--实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、 Min(返回最小值的操作)的时间复杂度为O(1)
- 模拟实现一个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)
- ~实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)~
- 剑指offer 21---实现一个栈, 要求实现Push( 出栈) 、 Pop( 入栈) 、 Min( 返回最小值的操作) 的时间复杂度为O(1)
- 1. 实现一个栈,要求实现 Push (出栈)、 Pop (入栈)、 Min (返回最小值的操作) 的时间复杂度为 O(1)
- React 组件间通信
- 深入理解泛型(二) 协变性和逆变性
- PHP email
- reverse digits of an integer
- leetCode 系列:best time to buy and sell stock
- 实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- sendfile:Linux中的"零拷贝"
- PHP内核FastCGI探索之路
- 两个阿里云linux服务器之间传文件
- table表格网页布局的特点和影响
- 关于eclipse和myeclipse用同一个Tomcat时出现的问题
- 01_求给定字符串最长重复子串
- OpenGL实现相机视频NV21格式转RGB格式
- 信息检索导论(第一章) 布尔检索