题目:包含min函数的栈
思路:这个问题的解决方法很多,这里举出一种比较好理解的方法,即使用两个栈实现。
5 |
1 |
4 |
2 |
3 |
1 |
1 |
2 |
2 |
3 |
minstack
minstack的存放规则是:如果找到一个最小值,则将该值放入栈中,下一次push的值和他进行对比,若比它大,则仍然压入该栈顶的值,否则压入新的较小值。
这样做的好处是,每次弹出时,将会很容易操作。
class Solution {
public:void push(int value) {
mystack.push(value);
if(minstack.empty()){
minstack.push(value);
}
else if(minstack.top()>value){
minstack.push(value);
}
else{
int temp=minstack.top();
minstack.push(temp);
}
}
void pop() {
mystack.pop();
minstack.pop();
}
int top() {
return mystack.top();
}
int min() {
return minstack.top();
}
private:
stack<int> mystack;
stack<int> minstack;
};