劍指T30 包含min函式的棧

2021-08-16 18:00:38 字數 882 閱讀 8054

題目:

定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。

要求:不僅要獲得當前的最小元素,還要獲得在此之前的次小元素。

分析:需要建立乙個輔助棧來不斷依次存放當前的最小元素。每次將資料壓入資料棧的時候,都將其與輔助棧的棧頂元素進行比較,如果vlaue比輔助棧頂的元素小,則將value壓入輔助棧,否則,重複將輔助棧的棧頂元素壓入輔助棧。

但此時,依據以上分析,在牛客網上實現時,卻無法通過測試,**如下:

#include#include#includeclass solution 

void pop()

int top()

int min()

private:

std::stackm_data;

std::stackm_min;

};

結果如下:

不知道問題在**~~

但是,如果在value大於輔助棧頂元素時,不將輔助棧頂元素重複壓入輔助棧,反而通過了算例測試,**和結果如下:

有大神給講解一下嗎?

劍指 30 包含min函式的棧

定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的 min 函式在該棧中,呼叫 min push 及 pop 的時間複雜度都是 o 1 示例 minstack minstack new minstack minstack.push 2 minstack.push 0 minstack.pu...

劍指offer 棧 30 包含min函式的棧

維護兩個棧 棧st儲存所有元素,minst是乙個單調棧,棧頂元素為min 1.入棧 st.push x 若minst.top x或minst為空,x入棧minst 2.出棧 若minst與st棧頂元素相同,則二者都出棧,否則st出棧 3.獲取最小值 若minst不為空,返回minst棧頂元素 cla...

劍指Offer 30 包含min函式的棧

定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 首先觀察到min的時間複雜度是o 1 所以不可能是在我們呼叫min的時候再去計算棧中元素的最小值,最小值一定是提前儲存好的。其次最小值必須隨著push和pop更新,也就...