您的位置:首页 > 职场人生

面试题21包含min函数的栈

2017-05-30 19:09 295 查看
题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。

思路: 

如果只用一个元素保存最小的元素,那么当最小的元素被弹出后,就没有办法得到剩余元素中最下的元素。 

所以,最好的办法是将每次的最小元素(之前的最小元素和新压入的元素两者的较小者)都保存起来放到另外一个辅助栈里。

这是剑指offer书中的举例一个模拟过程: 





#include<iostream>
#include<vector>
#include<stack>
#include<cassert>
using namespace std;
template<typename T>
class StackMin{
public:
stack<T> data;
stack<size_t> minStack;

void push(const T& val)
{
data.push(val);
if(minStack.size()==0||val<minStack.top())
minStack.push(val);
else
minStack.push(minStack.top());
}
void pop()
{
assert(data.size()>0&&minStack.size()>0);
data.pop();
minStack.pop();
}
const T& min()
{
assert(data.size()>0&&minStack.size()>0);
return minStack.top();
}

};
int main()
{
StackMin<int> s;
s.push(3);
cout<<s.min()<<endl;
s.push(4);
cout<<s.min()<<endl;
s.push(2);
cout<<s.min()<<endl;
s.push(1);
cout<<s.min()<<endl;
s.pop();
cout<<s.min()<<endl;
s.pop();
cout<<s.min()<<endl;
s.push(0);
cout<<s.min()<<endl;
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: