O(1)時間複雜度求棧中最小元素

 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 }
相關文章
相關標籤/搜索