剑指offer算法题
栈
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
题目分析
借助一个辅助栈,入栈的时候,只将小于等于辅助栈栈顶的值入栈(因为辅助栈用于存储最小值,同时这个栈自顶向下应该是递减的)。
出栈的时候,如果辅助栈栈顶的值和当前栈要出栈的值相同,两个栈同时出栈。如果不相同,当前栈出栈,辅助栈不出栈。
下面是Java代码
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<>();
Stack<Integer> stack2 = new Stack<>();
//栈2作为辅助栈,用于将最小值按顺序存储。
public void push(int node) {
stack1.push(node);
if(stack2.isEmpty()){
stack2.push(node);
}else if(stack2.peek()>=node){
stack2.push(node);
}
}
public void pop() {
if(stack1.peek() == stack2.peek()){
stack2.pop();
}
if(stack1.isEmpty()){
return;
}else{
stack1.pop();
}
}
public int top() {
return stack1.peek();
}
public int min() {
return stack2.peek();
}
}