(一)設計包含min函數的棧

題目:定義棧的數據結構,要求添加一個min函數,能夠得到棧的最小元素。要求函數min、push以及pop的時間複雜度都是O(1)。

 

分析:普通的棧push(),pop()都是O(1),現在需要加入min方法。第一眼看這個題,想到在棧結構中加一個min變量,保存當前棧最小元素。這樣在push()操作時比較當時元素與min變量值來決定是否要替換min變量,即push()操作O(1),但是pop()的時候最有麻煩,因爲如果pop()的是最小元素,那更新min變量就需要重新遍歷整個棧,時間複雜爲O(n)。如果繼續按上面思路想下去,再加一個次小變量仍然解決不了pop()時更新的問題。所以需要定義一個輔助棧存當前棧中的最小值,也就是需要一個是正常的數據棧,一個是存放最小元素的輔助棧。push的時候,如果輔助棧爲空,則直接把當前元素壓入輔助棧。否則比較當前元素值與輔助棧頂元素值(即之前最小值),取最小者壓入棧。pop的時候與數據棧同時。最後提一個優化的地方,輔助棧可以不保存數據本身,而是隻保存數據在數據棧的索引,這樣可以減少內存使用。下面的實現使用STL的stack,沒有辦法用迭代器訪問stack中間元素,所以輔助棧保存數據本身而並非索引。

 

C++實現:

發佈了42 篇原創文章 · 獲贊 6 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章