LintCode 12. Min Stack
Description
Implement a stack with following functions:
push(val)
push val into the stackpop()
pop the top element and return itmin()
return the smallest number in the stack
All above should be in O(1) cost.
实现一个栈, 支持以下操作:
push(val)
将 val 压入栈pop()
将栈顶元素弹出, 并返回这个弹出的元素min()
返回栈中元素的最小值
All above should be in O(1) cost.
Example
样例1:
输入:
push(1)
min()
push(2)
min()
push(3)
min()
输出:
1
1
1
样例2:
输入:
push(1)
pop()
push(2)
push(3)
min()
push(4)
min()
Challeng
最小栈的构建。
Submission
1. 主栈与最小栈一一对应
举例:
主栈 : 8 7 5 2 3 4
最小栈 :8 7 5 2 2 2
class MinStack {
public:
MinStack() {
// do intialization if necessary
}
/*
* @param number: An integer
* @return: nothing
*/
stack<int> str;
stack<int> minstr;
void push(int number) {
// write your code here
if(str.empty()) {
minstr.push(number);
} else {
int temp = minstr.top();
if(number < temp) {
minstr.push(number);
} else {
minstr.push(temp);
}
}
str.push(number);
}
/*
* @return: An integer
*/
int pop() {
// write your code here
int res = str.top();
str.pop();
minstr.pop();
return res;
}
/*
* @return: An integer
*/
int min() {
// write your code here
return minstr.top();
}
};
2. 最小栈比较
举例:
主栈 : 8 7 5 2 3 4
最小栈 :8 7 5 2
class MinStack {
public:
MinStack() {
// do intialization if necessary
}
/*
* @param number: An integer
* @return: nothing
*/
stack<int> str;
stack<int> minstr; //最小栈
void push(int number) {
// write your code here
if(str.empty() || number <= minstr.top()) {
minstr.push(number);
}
str.push(number);
}
/*
* @return: An integer
*/
int pop() {
// write your code here
int res = str.top();
str.pop();
if(res == minstr.top()) {
minstr.pop();
}
return res;
}
/*
* @return: An integer
*/
int min() {
// write your code here
return minstr.top();
}
};