1.题目
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为)。
2.思路
只有一个栈肯定无法实现的时间复杂度弹出最小元素。
可以添加一个辅助栈,每次新加入的数字比栈顶元素小就入辅助栈。
栈弹出元素时,如果栈顶元素和辅助栈的栈顶元素相等,辅助栈弹出元素。
3.实现
class Solution {
public:
void push(int value) {
numStack.push(value);
if(minStack.empty() || value <= minStack.top())
minStack.push(value);
}
void pop() {
int num = numStack.top();
numStack.pop();
if(num == minStack.top())
minStack.pop();
}
int top() {
return numStack.top();
}
int min() {
return minStack.top();
}
private:
stack<int> numStack;
stack<int> minStack;
};