问题描述
要求实现一个最小栈,除了经典的栈的各种功能外,要求能够在常数时间内获取当前栈里所有元素中的最小值。
这个问题的解决思路很巧妙,也很朴素,我没看答案之前没想出来,特此分享一下:
最小值这个量,跟元素其实是一样的,有栈的性质,所以用多一个栈来记录当前的最小值即可。
class Solution {
public:
stack<int> minE, data;
int my_min(int a, int b) {
if (a <= b)
return a;
return b;
}
void push(int value) {
data.push(value);
if (minE.empty())
minE.push(value);
else
minE.push(my_min(value, minE.top()));
}
void pop() {
data.pop();
minE.pop();
}
int top() {
return data.top();
}
int min() {
return minE.top();
}
};