2.设计包含min 函数的栈。
2014-12-10 20:29
260 查看
题目描述:定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。
要求函数min、push 以及pop 的时间复杂度都是O(1)。
分析:这种题其实是相当的简单,只需要多开一个栈,用来保存最小的元素,然后就能做到时间复杂度都是O(1)。
代码实现:
#include<iostream>
#include<string>
#include<stack>
using namespace std;
struct StackGetMin{
stack<int> elements;
stack<int> minStack;
void push(int x)
{
elements.push(x);
if(minStack.empty()||x<=minStack.top())
minStack.push(x);
}
bool pop()
{
if(elements.empty()) return false;
if(elements.top()==minStack.top())
minStack.pop();
elements.pop();
return true;
}
bool getMin(int &min)
{
if(minStack.empty())
return false;
else
{
min=minStack.top();
return true;
}
}
};
int main()
{
StackGetMin stackMin;
stackMin.push(2);
stackMin.push(6);
stackMin.push(4);
int min;
stackMin.getMin(min);
cout<<min<<endl;
return 0;
}
要求函数min、push 以及pop 的时间复杂度都是O(1)。
分析:这种题其实是相当的简单,只需要多开一个栈,用来保存最小的元素,然后就能做到时间复杂度都是O(1)。
代码实现:
#include<iostream>
#include<string>
#include<stack>
using namespace std;
struct StackGetMin{
stack<int> elements;
stack<int> minStack;
void push(int x)
{
elements.push(x);
if(minStack.empty()||x<=minStack.top())
minStack.push(x);
}
bool pop()
{
if(elements.empty()) return false;
if(elements.top()==minStack.top())
minStack.pop();
elements.pop();
return true;
}
bool getMin(int &min)
{
if(minStack.empty())
return false;
else
{
min=minStack.top();
return true;
}
}
};
int main()
{
StackGetMin stackMin;
stackMin.push(2);
stackMin.push(6);
stackMin.push(4);
int min;
stackMin.getMin(min);
cout<<min<<endl;
return 0;
}
相关文章推荐
- 设计包含 min 函数的栈
- 2、设计包含min 函数的栈
- 笔试题:设计包含min 函数的栈
- 第二题 设计包含min 函数的栈。
- 第二题(设计包含min 函数的栈)
- (微软100题)2.设计包含min 函数的栈。
- 2.设计包含min 函数的栈
- 设计包含min 函数的栈(程序分析)
- 2.设计包含 min 函数的栈[StackWithMinValue]
- 2.设计包含min 函数的栈。3.求子数组的最大和
- 面试题系列-----数据结构(设计包含 min 函数的栈(栈))
- 设计一个包含pop,push,min在内的栈,并且各个函数的时间复杂度均为o(1)
- 【100题】设计包含min 函数的栈
- (微软面试100题)设计包含min 函数的栈
- (微软100题)2.设计包含min 函数的栈。
- 每天学习一算法系列(3)(设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1))
- 2.设计包含min 函数的栈。
- 微软面试题系列(二):设计包含 min 函数的栈
- NO.2 设计包含min 函数的栈
- 2.设计包含min 函数的栈