提示
LintCode中的相关算法题实现代码,可以在我的GitHub中下载。
题目需求
描述
实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。
你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成。
样例
如下操作:push(1),pop(),push(2),push(3),min(), push(1),min() 返回 1,2,1
解题思路
1.我们可以维护一个栈,来进行存储最小值,每一次添加或或者删除元素,需要同时添加和弹出维护栈的元素。
2.如果加入的元素是小于最小值,那么维护的栈添加一个元素依旧是当前最小值,否者改为新的值
3.如果删除一个元素,那么就弹出维护栈元素。
实现的代码
class MinStack {
public:
stack<int> stack1;
stack<int> stack2;
MinStack() {
// do intialization if necessary
}
/*
* @param number: An integer
* @return: nothing
*/
void push(int number) {
// write your code here
stack1.push(number);
if(stack2.size()==0)
{
stack2.push(number);
return;
}
if(stack2.top()>number)
stack2.push(number);
else
stack2.push(stack2.top());
}
/*
* @return: An integer
*/
int pop() {
// write your code here
stack2.pop();
int value=stack1.top();
stack1.pop();
return value;
}
/*
* @return: An integer
*/
int min() {
// write your code here
return stack2.top();
}
};