劍指offer20 包含min函式的棧

2021-10-19 07:29:13 字數 633 閱讀 3412

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

對於乙個棧來說,要找到其中的最小值需要遍歷整個棧,時間複雜度為o(n)。既然要求要o(1)的時間複雜度,就只能考慮用空間來換時間了。

那麼已經決定用空間來換時間,下一步就是確定考慮怎麼使用輔助空間。

這個輔助空間應該時刻記住(即在o(1)的時間複雜度能找到)當前的最小值。

如果進來乙個比當前最小值的元素,我們就同時放進棧和這個輔助空間了;

如果進來乙個比當前最小大的元素,就把當前最小再放進輔助空間一次,進來的元素只放進原來的棧裡面;

當需要進行pop操作時,都把最後放進來的元素彈出去。

在求min的時候,只需要獲取輔助空間最後乙個進去的元素就行了。

理論上是stack,vector,deque都行,為了保持形式的一致性,我們將輔助空間設為棧。

class

solution

else

}void

pop(

)int

top(

)int

min()}

;

雙棧

輔助空間

空間換時間

《劍指offer》20 包含min函式的棧

定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式。c 實現 思路 應用乙個輔助棧,壓的時候,如果a棧的壓入比b棧壓入大,b棧不壓,小於等於,ab棧同時壓入,出棧,如果,ab棧頂元素不等,a出,b不出。class solution void pop int top int m...

劍指Offer 20 包含min函式的棧

定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式 時間複雜度應為o 1 注意 保證測試中不會當棧為空的時候,對棧呼叫pop 或者min 或者top 方法。第一反應 每次壓入乙個新元素進棧時,將棧裡的所有元素排序,讓最小的元素位於棧頂,這樣就能在o 1 時間得到最小元素。但是...

劍指offer 20 包含min函式的棧

主流想法 在看到這道題目的時候第一反應是要用乙個最小值來保留當前棧中最小值,但是也能夠很快地意識到比較麻煩的地方在於pop的時候怎麼更新min值,看了別人的題解之後都是使用了另外乙個棧來保持在入棧過程中曾經做過最小值的值,pop的時候判斷兩個棧頂元素是否一致,一致的話都要pop,在這種情況下取最小值...