本文參考自《劍指offer》一書,代碼採用Java語言。html
更多:《劍指Offer》Java實現合集 java
定義棧的數據結構,請在該類型中實現一個可以獲得棧的最小元素的min函數。在該棧中,調用min、push及pop的時間複雜度都是O(1)。node
最初想法是定義一個成員變量min來存放最小元素,可是當最小元素彈出後,min就須要相應改變,因此必須把每次的最小值都存儲下來。考慮採用一個輔助棧來存放最小值:數據結構
棧 3,4,2,5,1函數
測試算例 post
1.新壓入數字更大測試
2.新壓入數字最小url
3.彈出數字最小spa
4.彈出數字不是最小htm
//題目:定義棧的數據結構,請在該類型中實現一個可以獲得棧的最小元素的min //函數。在該棧中,調用min、push及pop的時間複雜度都是O(1)。 public class StackWithMin { Stack<Integer> stack_data=new Stack<Integer>(); Stack<Integer> stack_min=new Stack<Integer>(); public void push(int node) { stack_data.push(node); if(stack_min.empty() || stack_min.peek()>node) { stack_min.push(node); }else { stack_min.push(stack_min.peek()); } } public void pop() { if(!stack_data.empty()) { stack_data.pop(); stack_min.pop(); } } public int min() { return stack_min.peek(); } }
要學會這種狀況下輔助棧的用法。