实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。
你实现的栈将支持push,pop 和min 操作,所有操作要求都在O(1)时间内完成。
注意事项
如果堆栈中没有数字则不能进行min方法的调用
样例
如下操作:push(1),pop(),push(2),push(3),min(), push(1),min() 返回1,2,1
思路:要求时间复杂度为O(1),采用stack<int>实现,但是同时又需要返回最小值。因此需要一个最小值stack,思路很简单,插入第一个元素时,任意;其后插入,带插入的元素与最小值栈栈顶元素比较,若小最小值栈则插入带插入的元素;若大,最小值插入最小值栈顶元素。
举个栗子:
栈 对应最小值栈
8 2
3 2
7 2
2 2
5 4
4 4
6 6
代码:
class MinStack {
public:
MinStack() {
// do intialization if necessary
}
/*
* @param number: An integer
* @return: nothing
*/
void push(int number) {
// write your code here
if(Stack.empty())
{
minStack.push(number);
}
else
{
int tmp = minStack.top();
if(number < tmp)
{
minStack.push(number);
}
else
{
minStack.push(tmp);
}
}
Stack.push(number);
}
/*
* @return: An integer
*/
int pop() {
// write your code here
int tmp = 0;
tmp = Stack.top();
Stack.pop();
minStack.pop();
return tmp;
}
/*
* @return: An integer
*/
int min() {
// write your code here
return minStack.top();
}
private:
stack<int> Stack;
stack<int> minStack;
};