窗口问题[1]-最小栈
实现一个最小栈,这个栈有一个getMin方法,能在O(1)的时间复杂度内返回栈中最小的元素
代码及实现思路如下?
public class MinStack {
/**
* 思路
*
* 使用两个栈
*
* 一个栈存放的是正常的压栈元素
* 另一个压的是包括当前元素在内栈中最小的位置
*
* 如果 压入的元素大于最小栈的栈顶
* 说明这个元素大,则将最小栈栈顶元素再次压入最小栈
*
* 如果 压入元素小于等于最小栈栈顶,则同时将数据压入两个栈
*
* 出栈的时候
* 同时出两个栈
*
*
*
*/
Stack<Integer> stack1 = new Stack<>();
Stack<Integer> stack2 = new Stack<>();
public void push(int v){
stack1.push(v);
if(stack2.isEmpty()){
stack2.push(v);
} else {
if(v<=stack2.peek()){
stack2.push(v);
}else{
stack2.push(stack2.peek());
}
}
}
public Integer pop(){
if(stack1.isEmpty()){
return null;
}else {
stack2.pop();
return stack1.pop();
}
}
public Integer getMin(){
return stack2.isEmpty()?null:stack2.peek();
}
}