栈和队列——包含min函数的栈
实现一个特殊的栈, 在实现栈的基本功能的基础上, 再实现返
回栈中最小元素的操作。
【要求】
1. pop、 push、 getMin操作的时间复杂度都是O(1)。
2. 设计的栈类型可以使用现成的栈结构。
自已以前的思路就是,每次getMin()函数时,就准备一个备用栈,将数据栈中的元素依次出栈到备用栈中,期间记录下最小元素,然后将备用栈中的元素依次弹回到数据栈中。
别人的思路,也是准备两个栈,一个数据栈dataStack,一个最小元素栈minStack,每次有元素入栈时,比较最小元素栈的栈顶peek,若小于,则将最小元素压入minStack中,否则将栈顶元素再次压入栈中
出栈时,左右两边 一起出栈。
package stackQueue; import java.util.Stack; /** * Created by Skye on 2018/4/5. */ public class StackOfMin { private Stack<Integer> dataStack; private Stack<Integer> minStack; public StackOfMin() { this.dataStack = new Stack<>(); this.minStack = new Stack<>(); } public void push(int num){ if(minStack.empty() || minStack.peek() > num){ minStack.push(num); }else{ int min = minStack.peek(); minStack.push(min); } dataStack.push(num); } public int pop(){ if(dataStack.empty()){ throw new RuntimeException( "stack is empty" ); } minStack.pop(); return dataStack.pop(); } public int getMin(){ if(minStack.empty()){ throw new RuntimeException("stack is empty"); } return minStack.peek(); } }