1. 程式人生 > >定義棧的資料結構,請在該型別中實現一個能夠得到棧中所含最小元素的min函式(時間複雜度應為O(1))

定義棧的資料結構,請在該型別中實現一個能夠得到棧中所含最小元素的min函式(時間複雜度應為O(1))

/** 思路:利用兩個棧來實現,一個主棧正常壓棧出棧,一個輔助棧用來儲存主棧所有值的最小值, 壓棧時,當壓入的值比輔助棧棧頂值大時,主棧正常壓棧,輔助棧不壓棧,小於等於二者都壓棧; 出棧時,當主棧和輔助棧棧頂元素不相等時,主棧正常出棧,輔助棧不出棧。 */ class Solution { public:     stack<int> stack1,stack2;     void push(int value) {         stack1.push(value);         if(stack2.empty())             stack2.push(value);         else if(stack2.top()>=value){             stack2.push(value);}     }     void pop() {         //特別注意因為判斷條件要獲取主棧的棧頂元素,所以主棧要後出棧         //stack1.pop();放在這個位置是錯誤的。         if(stack1.top()==stack2.top())             stack2.pop();         stack1.pop();     }     int top() {         return stack1.top();     }     int min() {         return stack2.top();     } };