算法思想:使用两个栈,一个栈用于正常栈功能数,另一个栈同步存储栈中状态最小值
//问题:实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
// - pop、push、getMin 操作的时间复杂度都是O(1)
// - 设计的栈类型可以使用现成的栈结构
import java.util.Stack;
public class getStackMin {
//算法思想:使用两个栈,一个栈用于正常栈功能数,另一个栈同步存储栈中状态最小值
Stack <Integer> stack = new Stack<Integer>();
Stack <Integer> minstack = new Stack<Integer>();
Integer min = Integer.MAX_VALUE;
public void push(Integer num){
//更新最小值栈
if(num < min){
min = num;
}
stack.push(num);
minstack.push(min);
}
public Integer pop(){
if(stack.isEmpty()){
throw new IllegalArgumentException("栈为空");
}
minstack.pop();
return stack.pop();
}
public Integer getMin(){
if(stack.isEmpty()){
throw new IllegalArgumentException("栈为空");
}
return minstack.peek();
}
}
测试类:
public class minStackTest {
public static void main(String[] args) {
getStackMin minStack = new getStackMin();
minStack.push(5);
minStack.push(3);
System.out.println(minStack.getMin()); //3
minStack.push(7);
System.out.println(minStack.getMin()); //3
minStack.push(9);
System.out.println(minStack.pop()); //9
System.out.println(minStack.pop()); //7
System.out.println(minStack.pop()); //3
System.out.println(minStack.getMin()); //5
System.out.println(minStack.pop()); //5
}
}