題目描述
定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。
這個題要求時間複雜度是o(1)
竟然想了好久沒想出來,原來思維定式了,一直在想既然要從小到大排序怎麼可能實現o(1)呢
其實由於出棧入棧是由順序的,用來記錄最小值的棧也不用完整記錄所有元素的順序,只要根據入棧的順序來就行
比如 入棧 9 8 10 4 5 2
如果入棧是發現比輔助棧的頭元素小就入輔助棧
輔助棧 9 8 4 2
完全不懂擔心 5沒有加入棧中 因為只要前面有比它小的數,那它就永遠不可能成為最小值
stackminstack = new stack<>();
stackstack = new stack<>();
public
void
push(int node)
public
void
pop()
public
inttop()
public
intmin()
劍指offer 包含min函式的棧
一 問題描述 二 思路 兩個棧,乙個當前棧data,乙個輔助棧m min,輔助棧用來儲存當前的最小值,如果出棧,輔助棧也出棧,棧頂元素始終是當前的最小值。在入棧時,如果輔助棧為空或者當前值小於輔助棧棧頂元素,則將當前值加入輔助棧 否則將輔助棧的棧頂元素加入輔助棧,表明此次有大於min棧頂數字入棧。以...
劍指offer 包含min函式的棧
定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。思路 這裡,定義兩個棧,stack和min stack,其中,min stack的最後乙個數永遠保持是stack中最小的乙個數。具體的,在puch時,只儲存比當前最小的還要小的數。pop時,如果stack最小的數pop出,min ...
劍指OFFER 包含min函式的棧
定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式 時間複雜度應為o 1 題目中要求min函式時間複雜度為o 1 也就說明要求在push的過程中就存下最小值。要注意的是,如果最小值被彈出後,min要變為次小值。因此要借助乙個輔助棧來儲存每次壓入乙個新數字的時候,棧中的最小值。...