【Java】 劍指offer(30) 包含min函式的棧 《劍指Offer》Java實現合集 《劍指Offer》Java實現合集
阿新 • • 發佈:2018-11-11
本文參考自《劍指offer》一書,程式碼採用Java語言。
題目
定義棧的資料結構,請在該型別中實現一個能夠得到棧的最小元素的min函式。在該棧中,呼叫min、push及pop的時間複雜度都是O(1)。
思路
最初想法是定義一個成員變數min來存放最小元素,但是當最小元素彈出後,min就需要相應改變,所以必須把每次的最小值都儲存下來。考慮採用一個輔助棧來存放最小值:
棧 3,4,2,5,1
輔助棧 3, 3,2,2,1 (壓入時,把每次的最小元素(之前最小元素與新入棧元素的較小值)儲存起來放到輔助棧中)測試算例
1.新壓入數字更大
2.新壓入數字最小
3.彈出數字最小
4.彈出數字不是最小
Java程式碼
//題目:定義棧的資料結構,請在該型別中實現一個能夠得到棧的最小元素的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(); } }
收穫
要儲存的元素(如最小元素)在不同時候會發生變化時,可以考慮用棧來儲存。