package algorithm.stack; import datastructure.basic.Iterator; import datastructure.basic.LinkedList; import java.util.EmptyStackException; /** * 设计一个栈,支持栈的push和pop操作,以及第三种操作findMin, 它返回改数据结构中的最小元素 * finMin操作最坏的情形下时间复杂度应该是O(1) , 简单来讲,操作一次就可以得到最小值 * * @author liuxin */ public class QuickMinStack { private LinkedList elements = new LinkedList(); private LinkedList sorted = new LinkedList(); public void push(int data) { elements.addFirst(data); insert(sorted, data); } private void insert(LinkedList sorted, int data) { Iterator iterator = sorted.iterator(); int insertPos = 0; while (iterator.hasNext()) { if ((int) iterator.next() >= data) { break; } insertPos++; } sorted.add(insertPos, data); } public int pop() { if (elements.isEmpty()) { throw new EmptyStackException(); } int peek = (int) elements.removeFirst(); sorted.remove(sorted.indexOf(peek)); return peek; } public int findMin() { return (int) sorted.get(0); } }