package org.xukai.coderising.stack;
import org.junit.Test;
import java.util.*;
/**
* 设计一个栈,支持栈的push和pop操作,以及第三种操作findMin, 它返回改数据结构中的最小元素
* finMin操作最坏的情形下时间复杂度应该是O(1) , 简单来讲,操作一次就可以得到最小值
* @author liuxin
*
*/
public class QuickMinStack {
private TreeSet<Integer> treeSet = new TreeSet<Integer>();
private java.util.Stack<Integer> stack = new java.util.Stack<Integer>();
public void push(int data){
stack.push(data);
treeSet.add(data);
}
public int pop(){
if (!stack.isEmpty()) {
treeSet.remove(stack.peek());
return stack.pop();
}
return -1;
}
public int findMin(){
if (treeSet.size() > 0) {
return treeSet.first();
}
return -1;
}
@Test
public void testQuickMinStack(){
QuickMinStack stack = new QuickMinStack();
stack.push(6);
stack.push(5);
stack.push(4);
stack.push(3);
stack.push(2);
stack.push(1);
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println("min:" + stack.findMin());
System.out.println(stack.pop());
System.out.println("min:" + stack.findMin());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println("min:" + stack.findMin());
System.out.println(stack.pop());
System.out.println("min:" + stack.findMin());
System.out.println(stack.pop());
}
}