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

一道比较简单的Google面试题

2007-04-09 17:32 381 查看
/*对现在的栈stack进行改进,加一个min功能,使之能够在常数时间,即O(1)找到栈中最小值.可以对Push(const Type&val) 和 Pop()函数进行修改,但要求其时间复杂度都是O(1).
*/
#include<iostream>
#include<stack>
#include<ctime>
#include<cstdlib>

using namespace std;

template<typename T>
class MyStack
{
private:
stack<T> master;//主要的栈
stack<T> slave; //辅助栈
public:
void MyPush( const T& val )
{
if(master.empty())
{
master.push(val);
}
else
{
while(!master.empty())
{
T curData = master.top();
if(curData >= val)
{
master.push(val);
break;
}
else
{
slave.push(curData);
master.pop();
}
}
while(!slave.empty())
{
master.push(slave.top());
slave.pop();
}
}
}
T MyMin()
{
return master.top();
}

};
int main()
{
MyStack<int> ms;
int *a = new int[10];
srand(time(0));
for(int i = 0; i<10;++i)
{
a[i] = rand()%100;
cout<<a[i]<<" ";
ms.MyPush(a[i]);
}
cout<<endl;
int ivalue = ms.MyMin();
cout<<"The min value is :"<<ivalue<<endl;

delete []a;
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: