题目:
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。
在该栈中,调用min,push,pop函数的世界复杂度都是O(1)。
思路:
维护一个辅助栈s2,用来存储当前栈中的最小元素
比如栈s1 :<2,4,3,1,5> ,辅助栈s2就是: <2,2,2,1,1>
代码:
#include<iostream>
#include <stack>
using namespace std;
//功能:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。
//在该栈中,调用min,push,pop函数的世界复杂度都是O(1)。
//思路:维护一个辅助栈s2,用来存储当前栈中的最小元素
//比如栈s1 :<2,4,3,1,5> ,辅助栈s2就是: <2,2,2,1,1>
struct StackWithMin
{
stack<int> s1;
stack<int> s2;
void push1(int val)
{
s1.push(val);
if(s2.empty() || val <= s2.top())
s2.push(val);
else
{
s2.push(s2.top());
}
}
int min()
{
if(!s2.empty())
return s2.top();
else
return -1;
}
void pop1()
{
if(!s1.empty() && !s2.empty())
{
s1.pop();
s2.pop();
}
}
};
int main()
{
StackWithMin obj;
obj.push1(4);
obj.push1(2);
obj.push1(3);
obj.push1(1);
cout<<obj.min()<<endl;
obj.pop1();
cout<<obj.min()<<endl;
}