在baidu被問到這道題,算是一個設計題吧,面試時就這一個沒答上來。回來後查了一下,發現原來很簡單,鬱悶~
轉載自別人,記錄一下:
問題描述:
對現在的Stack(棧)數據結構進行改進,加一個min()功能,使之能在常數,即O(1),時間內給出棧中的最小值。可對push()和pop()函數進行修改,但要求其時間複雜度都只能是O(1)。
解決方案:
在棧的每個元素加一個屬性值 min (用於記錄當前位置下面的元素的最小值),元素的值用key表示
壓棧-Push:當壓入的元素key小於當前棧頂元素的min值時,將新壓入元素的min字段設置爲新壓入元素的key,否則,將新壓入元素的min字段,設置爲當前棧頂元素的min字段的值
(壓入第一個元素時,直接設置當前 min <- key)
出棧-Pop:和以前一樣刪除就行
這樣棧頂元素中的min字段,存儲的就是棧中的最小值, 刪除也不用額外的比較操作~