设计一个有getMin功能的栈
设计一个具有getMin功能的栈,可以返回栈中的最小的元素,可以使用现有的栈的数据结构,要求pop/push/getMin操作的时间复杂度是O(1)。
package com.test; import java.util.Stack; /**
* Created by Demrystv.
*/
public class GetMinStack {
//定义两个栈,一个存放正常的数据,一个存放最小值
Stack<Integer> stackData = new Stack<Integer>();
Stack<Integer> stackMin = new Stack<Integer>(); //在入栈时,如果stackMin是空,同步压入,
//如果不是空,但是新元素小于等于stackMin的栈顶元素,也同步压入
//如果不是空,新元素大于stackMin的栈顶元素,就不压入 stackMin
//这样就可以保证stackMIn中的元素依次减少
public void push(int newNum){
if(stackMin.isEmpty()){
stackMin.push(newNum);
}else if (newNum<=stackMin.peek()){
stackMin.push(newNum);
}
stackData.push(newNum);
} //出栈和入栈是相对应的
//stackData中的栈顶元素只会大于等于stackMin栈顶元素
//如果大于,只弹出stackData的栈顶元素,如果等于,两个的栈顶元素都要弹出
public int pop(){
if(stackData.isEmpty()){
throw new RuntimeException("Your stack is empty.");
}
int value = stackData.pop();
if(value==stackMin.peek()){
stackMin.pop();
}
return value;
} public int getMin(){
if(stackMin.isEmpty()){
throw new RuntimeException("Your stack is empty.");
}
return stackMin.peek();
}
}