劍指offer:包含min函數的棧
阿新 • • 發佈:2019-03-26
數據結構 class min pty 結構 void offer 輔助 函數
題目描述:
定義棧的數據結構,請在該類型中實現一個能夠得到棧中所含最小元素的min函數(時間復雜度應為O(1))。
解題思路:
相當與在保留原棧的同時,去維護一個最小棧。利用一個輔助棧來完成。對於每個新輸入的數,在壓入原棧的同時,需要去判斷是否為最小值,若為最小指,則壓入輔助棧,否則將當前最小值壓入輔助棧。這樣就相當於兩個棧的大小是相等的,每次做push和pop操作時,二者需要同步。最後的min函數只需要取輔助棧的top就可以。
代碼:
class Solution { public: stack<int>cur, min_stack;void push(int value) { cur.push(value); if(min_stack.empty()) min_stack.push(value); else { if(value < min_stack.top()) min_stack.push(value); else min_stack.push(min_stack.top()); } }void pop() { if(!cur.empty()) { cur.pop(); min_stack.pop(); } } int top() { if(!cur.empty()) return cur.top(); return 0; } int min() { if(!min_stack.empty()) {return min_stack.top(); } return 0; } };
劍指offer:包含min函數的棧