题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
思路:定义两个栈data 和Min
考虑使用2个栈,一个用于保存待压入的数据,另一个栈专门用于保存最小值。
初始:2个栈都为空 将元素都压入进去。
之后:如果待压入的元素 <= 最小值栈的栈顶元素 那么同样需要将元素压进2个栈。
否则 只需要将元素压进数据栈。
class Solution {
public:
void push(int value) {
data.push(value);
if(Min.empty())
Min.push(value);
if(Min.top()>value)
Min.push(value);
}
void pop() {
if(Min.top()==data.top())
Min.pop();
data.pop();
}
int top() {
return data.top();
}
int min() {
return Min.top();
}
private:
stack<int> data;
stack<int> Min;
};