1. 程式人生 > >劍指Offer——包含min函數的棧

劍指Offer——包含min函數的棧

bsp 自定義 blog pan 分析 如果 str top struct

題目描述:

定義棧的數據結構,請在該類型中實現一個能夠得到棧最小元素的min函數。


分析:

這題講究效率,如果出棧一個一個的找,時間效率低下。

所以我們用空間換時間,定義一個輔助棧,存儲當前的最小值。

入棧時,如果值是當前棧的最小值,則把值一並入輔助棧,不然只需要入主棧即可。

出棧時,如果當前棧的最小值要出棧了,那麽主棧和輔助棧一並出棧。

輔助棧的棧頂元素一直都是當前棧的最小值。


代碼:

 1 struct Stack {  // 自定義棧
 2     stack<int> myStack; // 主棧
 3     stack<int> myMin;   // 輔助棧,存最小值的棧
4 }; 5 class Solution { 6 public: 7 Stack s; 8 void push(int value) { // 入棧 9 s.myStack.push(value); // 值入主棧 10 if(s.myMin.empty()) 11 s.myMin.push(value); 12 if(value <= s.myMin.top()) // 最小值入輔助棧 13 s.myMin.push(value); 14 } 15 void
pop() { // 如果主棧棧頂是最小值,主棧和輔助棧都出棧 16 if(s.myStack.top() == s.myMin.top()) 17 s.myMin.pop(); 18 s.myStack.pop(); 19 } 20 int top() { 21 return s.myStack.top(); 22 } 23 int min() { 24 return s.myMin.top(); 25 } 26 };

劍指Offer——包含min函數的棧