实现一个特殊的栈, 在实现栈的基本功能的基础上, 再实现返
回栈中最小元素的操作。
【要求】
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();
}
}