您的位置:首页 > Web前端

剑指Offer之 - 包含min函数的栈

2015-05-07 14:14 260 查看

题目:

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: