/**
* Created by lxx on 2017/5/6.
*/
import java.util.Stack;
/**
* 设计一个栈,支持栈的push和pop操作,以及第三种操作findMin, 它返回改数据结构中的最小元素
* finMin操作最坏的情形下时间复杂度应该是O(1) , 简单来讲,操作一次就可以得到最小值
* @author liuxin
*
*/
public class QuickMinStack extends Stack<Integer> {
Stack<Integer> sMin;
public QuickMinStack(){
sMin = new Stack<Integer>();
}
public void push(int data){
if(data <= findMin()){
sMin.push(data);
}
super.push(data);
}
public Integer pop(){
int value = super.pop();
if(value == findMin()){
sMin.pop();
}
return value;
}
public int findMin(){
if(sMin.isEmpty()){
return Integer.MAX_VALUE;
}
return sMin.peek();
}
public static void main(String args[]){
QuickMinStack stack = new QuickMinStack();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(0);
System.out.println(stack.pop().intValue());
System.out.println(stack.findMin());
System.out.println(stack.pop());
System.out.println(stack.pop());
}
}