定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop、top 和 min 函数操作时,栈中一定有元素。
此栈包含的方法有:
push(value):将value压入栈中
pop():弹出栈顶元素
top():获取栈顶元素
min():获取栈中最小元素
方法一:要求找到栈中最小元素的时间复杂度是1,但是遍历一遍的时间复杂度是n,所以需要用空间换时间,再构造一个辅助栈,当新加入的val小于辅助栈栈顶元素时辅助栈push(val),当新加入元素大于辅助栈栈顶元素时,辅助栈push(stack.top())。
class Solution {
public:
stack<int> stack1;
stack<int> stack_min;
void push(int value) {
if(stack_min.empty()){
stack_min.push(value);
}else if(stack_min.top()<=value){
stack_min.push(stack_min.top());
}else if(stack_min.top()>value){
stack_min.push(value);
}
stack1.push(value);
}
void pop() {
stack1.pop();
stack_min.pop();
}
int top() {
return stack1.top();
}
int min() {
return stack_min.top();
}
};