package com.coding.basic.stack;
/**
* 设计一个栈,支持栈的push和pop操作,以及第三种操作findMin, 它返回改数据结构中的最小元素
* finMin操作最坏的情形下时间复杂度应该是O(1) , 简单来讲,操作一次就可以得到最小值
* @author zj
* @param <T>
*
*/
public class QuickMinStack<T extends Comparable<T>> {
private Stack<T> dataStack = new Stack<T>();
private Stack<T> minStack = new Stack<T>();
public void push(T item){
if(minStack.isEmpty()||item.compareTo(minStack.peek())<0){
minStack.push(item);
}else{
minStack.push(minStack.peek());
}
dataStack.push(item);
}
public T pop(){
minStack.pop();
return dataStack.pop();
}
public T findMin(){
return minStack.peek();
}
}