O(1)時間求出棧內元素最小值

在baidu被問到這道題,算是一個設計題吧,面試時就這一個沒答上來。回來後查了一下,發現原來很簡單,鬱悶~

 

轉載自別人,記錄一下:

 


 

 

問題描述:

對現在的Stack(棧)數據結構進行改進,加一個min()功能,使之能在常數,即O(1),時間內給出棧中的最小值。可對push()和pop()函數進行修改,但要求其時間複雜度都只能是O(1)。

 

解決方案:

在棧的每個元素加一個屬性值 min (用於記錄當前位置下面的元素的最小值),元素的值用key表示
 
壓棧-Push:當壓入的元素key小於當前棧頂元素的min值時,將新壓入元素的min字段設置爲新壓入元素的key,否則,將新壓入元素的min字段,設置爲當前棧頂元素的min字段的值
(壓入第一個元素時,直接設置當前 min <- key)
出棧-Pop:和以前一樣刪除就行
 
這樣棧頂元素中的min字段,存儲的就是棧中的最小值, 刪除也不用額外的比較操作~

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