题目描述:
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
思路:借用辅助栈,辅助栈保存当前最小的元素,比如放入栈中的数依次是3,4,2,7,5,当放3放入栈的时候,此时最小值就是3,那么辅助栈进入的就是3;当4放入栈的时候,因为3<4,此时,栈中最小的值依旧是4,因此,辅助栈放入的依旧是3(辅助栈的栈顶元素);当2放入栈的时候,此时,栈中最小的元素是2,因此,辅助栈放入的元素是2;当7放入栈的时候,此时,栈中的最小元素是2,因此,放入辅助栈的元素是2。....以此类推
代码:
package offer;
import java.util.Stack;
public class TestNo20 {
public static void main(String[] args) {
TestNo20 t = new TestNo20();
t.push(3);
t.push(4);
t.push(2);
t.push(5);
t.push(1);
System.out.println(t.min());
}
Stack<Integer> stack1 = new Stack<Integer>(); //用来作为存储栈
Stack<Integer> stack2 = new Stack<Integer>();//用来作为辅助栈
public void push(int node) {
stack1.push(node);
if(stack2.empty() || node<stack2.peek()){
stack2.push(node);
}else{
stack2.push(stack2.peek());
}
}
public void pop() {
if(!stack1.empty()){
stack1.pop();
stack2.pop();
}
}
public int top() {
return stack1.peek();
}
public int min() {
return stack2.peek();
}
}