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

劍指offer:包含min函數的棧

數據結構 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函數的棧