劍指offer 面試題21 包含min函式的棧

2021-07-28 01:46:00 字數 623 閱讀 2700

題目:定義棧的資料結構,請在該型別中實現乙個能夠得到得到棧的最小元素min函式。在該棧中,呼叫該push、pop、min的時間複雜度都是o(1).

//思路:棧自身的特徵:後進先出。如何滿足在o(1)的時間內但返回最小的元素?

//思路1:將棧排序,將最小的放到前面,每次呼叫min()的返回第乙個,不過這不符合棧的後進先出的特性了。

//思路2:新增乙個最小成員存放最小元素,這樣的話min()直接返回該元素,但是問題來了?當我們彈出最小的元素時,那次小的元素怎麼找到?

//思路3:通過思路2告訴我們,不僅要把當前的最大值給儲存下來,還要把之前的最小值儲存下來,以便在彈出的時候我在o(1)的時間,

//那如何儲存呢?我們很快就能想到用棧儲存下來了(輔助棧)

template

void stackwithmin:push : (const t& value)

else

}template

void stackwithmin::pop()

template

void stackwithmin::min()const

//最好加上修飾符const

劍指offer 面試題21 包含min函式的棧

題目 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小最小元素的min函式。在該棧中,呼叫min push 及 pop的時間複雜度都是o 1 本題關鍵問題在於 o 1 時間複雜度的 min 函式。即無論佔中元素如何變化。都要在 o 1 內知道最小值。因此,需要設定兩個棧 1 資料棧,用於資料的...

劍指offer 面試題21 包含min函式的棧

題目描述 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小素的min 函式。在該棧中,呼叫min push 及pop的時間複雜度都是0 1 題目分析 借助乙個輔助棧,當向棧中壓入元素時,跟輔助棧頂元素作比較,把最小的放到輔助棧中。每次都把最小元素放入輔助棧,這樣在彈出最小元素後,剩下的棧中棧頂...

劍指offer面試題21

面試題21 包含min函式的棧 題目 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 預備知識 棧的定義 模板函式 思路 面對乙個複雜的問題,我們可以舉幾個具體的例子來尋找規律,對於本題目,我們可以通過舉例來分析它...