劍指offer 包含min函式的棧

2021-09-23 17:23:07 字數 718 閱讀 1965

題目描述:

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

思路:

看到這個問題, 我們最開始可能會想, 新增乙個成員變數用於儲存最小元素, 每次壓棧時如果壓棧元素比當前最小元素更小, 就更新最小元素.

但是這樣會有乙個問題, 如果最小元素被彈出了呢, 如何獲得下乙個最小元素呢? 分析到這裡可以發現, 僅僅新增乙個成員變數存放最小元素是不夠的, 我們需要在最小元素彈出後還能得到次小元素, 次小的彈出後, 還要能得到次次小的.

因此, 用另乙個棧來儲存這些元素是再合適不過的了. 我們叫它最小元素棧.

每次壓棧操作時, 如果壓棧元素比當前最小元素更小, 就把這個元素壓入最小元素棧, 原本的最小元素就成了次小元素. 同理, 彈棧時, 如果彈出的元素和最小元素棧的棧頂元素相等, 就把最小元素的棧頂彈出.

實現:

class

solution

void

pop(

)int

top(

)int

min(

)private

: stack<

int>

s; stack<

int>

smin;

};

劍指offer 包含min函式的棧

一 問題描述 二 思路 兩個棧,乙個當前棧data,乙個輔助棧m min,輔助棧用來儲存當前的最小值,如果出棧,輔助棧也出棧,棧頂元素始終是當前的最小值。在入棧時,如果輔助棧為空或者當前值小於輔助棧棧頂元素,則將當前值加入輔助棧 否則將輔助棧的棧頂元素加入輔助棧,表明此次有大於min棧頂數字入棧。以...

劍指offer 包含min函式的棧

題目描述 定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。這個題要求時間複雜度是o 1 竟然想了好久沒想出來,原來思維定式了,一直在想既然要從小到大排序怎麼可能實現o 1 呢 其實由於出棧入棧是由順序的,用來記錄最小值的棧也不用完整記錄所有元素的順序,只要根據入棧的順序來就行 ...

劍指offer 包含min函式的棧

定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。思路 這裡,定義兩個棧,stack和min stack,其中,min stack的最後乙個數永遠保持是stack中最小的乙個數。具體的,在puch時,只儲存比當前最小的還要小的數。pop時,如果stack最小的數pop出,min ...