1 import java.util.Stack; 2 3 /** 4 * 功能:O(1)時間複雜度求棧中最小元素 5 * 思路:空間換取時間,使用兩個棧,stack1棧存儲數據,stack2棧存儲最小值; 6 * stack1入棧時,發現比stack2棧頂元素還小,則同時入stack2;stack1出棧時,同時也將stack2中的元素出棧。 7 */ 8 public class Main { 9 10 private Stack<Integer> stackValue = new Stack<Integer>(); 11 private Stack<Integer> stackMin = new Stack<Integer>(); 12 13 /** 14 * @param integer 15 */ 16 public void push(Integer integer) { 17 stackValue.push(integer); 18 if (integer < getMin()) { 19 stackMin.push(integer); 20 } 21 } 22 23 /** 24 * @return 25 */ 26 public Integer pop() { 27 if (stackValue.peek() == stackMin.peek()) { 28 stackMin.pop(); 29 } 30 return stackValue.pop(); 31 } 32 33 /** 34 * @return 35 */ 36 public Integer getMin() { 37 if (stackMin.size() == 0) { 38 return Integer.MAX_VALUE; 39 } 40 41 return stackMin.peek(); 42 } 43 44 public static void main(String[] args) { 45 46 Main main = new Main(); 47 48 main.push(10); 49 main.push(20); 50 main.push(9); 51 main.push(15); 52 53 System.out.println(main.getMin()); 54 } 55 }