//package com.coding.basic.stack; import java.util.Collections; import java.util.LinkedList; import java.util.List; /** * 设计一个栈,支持栈的push和pop操作,以及第三种操作findMin, 它返回改数据结构中的最小元素 * finMin操作最坏的情形下时间复杂度应该是O(1) , 简单来讲,操作一次就可以得到最小值 * * @author liuxin */ public class QuickMinStack { LinkedList<Integer> list = new LinkedList<Integer>(); LinkedList<Integer> temp = new LinkedList<>(); int min = Integer.MAX_VALUE; public void push(int data) { if (data < min) { min = data; } list.add(data); } public int pop() { int num = list.remove(list.size() - 1); if (num == min) { for (int tmp : list) { temp.add(tmp); } } Collections.sort(temp); min = temp.get(0); return list.remove(list.size() - 1); } public int findMin() { return min; } }