package com.coding.basic.stack; import java.util.ArrayList; import java.util.Comparator; import java.util.List; /** * 设计一个栈,支持栈的push和pop操作,以及第三种操作findMin, 它返回改数据结构中的最小元素 * finMin操作最坏的情形下时间复杂度应该是O(1) , 简单来讲,操作一次就可以得到最小值 * @author liuxin * */ public class QuickMinStack { //存储栈中元素,升序排列,minAscList.get(0)即能取出 private List<Integer> minAscList = new ArrayList<>(); private Stack stack; public void push(int data){ stack.push(data); minAscList.add(data); minAscList.sort(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1.compareTo(o2); } }); } public int pop(){ int val = (Integer)stack.pop(); minAscList.remove(new Integer(val)); return val; } public int findMin(){ return minAscList.get(0); } }