常數時間取得min值的棧

2021-05-26 09:00:39 字數 731 閱讀 2816

設計這樣的棧,常數時間內操作min,push,pop

又看了下程式設計之美關於此題的解法,總覺得太過繁瑣,實際上只需要用乙個陣列來儲存歷屆最小值即可,還可以省略掉乙個下標,不需要如此麻煩。

/*  

*/ #include using namespace std;

class stack

void push(int item)

position++;

data[position] = item;

if(position == 0) else

} void pop()

position--;

} int min()

return minvalues[position];

} bool empty()

private:

static const int size = 20;

int data[size];

int position;

int minvalues[size];

};void main()

; const int size = sizeof array / sizeof *array;

for(int i = 0; i < size; i ++)

cout << endl;

while(!stack.empty())

}

如何以常數時間找到棧中的最小值?

leetcode155.最小棧 思路 利用輔助棧 1.在push的時候主棧直接push,對於輔助棧如果棧為空,直接push,如果棧不為空,判斷push的值是否比棧頂值小,如果小於等於,則push,反之不push。2.pop的時候主棧判斷不為空後直接pop,輔助棧判斷不為空後,如果pop的值等於棧頂的...

棧在O 1 時間內求min值

實現乙個棧stack,要求實現push 出棧 pop 入棧 min 返回最小值的操作 的時間複雜度為o 1 思路 1 在stack的資料結構中加兩個個字段,如 typedef struct stack pop,push的時候都去棧頂元素,所以是o 1 min的時候取stack的min欄位,所以也是o...

Min棧的實現

問題 實現乙個棧,要求實現push 入棧 pop 出棧 min 返回最小值 的時間複雜度為o 1 思路 用兩個棧來實現,乙個存正常棧,另乙個存最小棧,要用到棧的基本操作,中的 stack.h 是我寫的棧的基本操作的 初始化 void minstackinit minstack pms 入棧 void...