劍指Offer——包含min函數的棧
阿新 • • 發佈:2017-10-29
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 voidpop() { // 如果主棧棧頂是最小值,主棧和輔助棧都出棧 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函數的棧