30 包含min函式的棧

2021-10-04 06:10:52 字數 800 閱讀 1011

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

注意:保證測試中不會當棧為空的時候,對棧呼叫pop()或者min()或者top()方法。

第一反應對棧內元素排序,把最小元素放在棧頂,但出棧操作不能保證「**先出」。該方案不行。

第二,棧內增加乙個成員變數記錄當前棧的最小元素,問題:當棧內最小元素彈出後,這個成員變數無法更新。故想到只要把次小元素、次次小元素都存起來就能解決。

注:劍指offer上處理為將每次入棧操作時當前的最小值均入輔助棧,即當入棧元素大於輔助棧棧頂元素時,將輔助棧棧頂元素繼續入棧,這樣出棧操作時,不管元素大小,資料棧和輔助棧均要出棧。

元素壓入資料棧時:若輔助棧為空,或者元素 <= 輔助棧棧頂元素,則將元素壓入輔助棧;(=是為了解決多個最小元素入棧,如【1,2,3,1】,若只壓入乙個1,當1出棧時,輔助棧為空。)

元素彈出資料棧時:若元素 = 輔助棧棧頂元素,則輔助棧棧頂元素也要出棧。(即相當於最小元素出棧,棧頂更新為次小元素)

class solution 

void pop()

else

return;

}int top()

int min()

else

return 0;

}private:

stackm_data;//資料棧

stackm_min;//輔助棧

};

劍指 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...

面試題30 包含min函式的棧

定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 思路 利用乙個輔助棧來存放最小值 棧 3,4,2,1 輔助棧 3,3,2,1 每入棧一次,就與輔助棧頂比較大小,如果小就入棧,如果大就入棧當前的輔助棧頂 當出棧時,輔...