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

2021-09-08 14:55:09 字數 398 閱讀 8622

問題描述:

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

解決方案:

在棧的每個元素加乙個屬性值 min (用於記錄當前位置下面的元素的最小值),元素的值用key表示

壓棧-push:當壓入的元素key小於當前棧頂元素的min值時,將新壓入元素的min欄位設定為新壓入元素的key,否則,將新壓入元素的min欄位,設定為當前棧頂元素的min欄位的值

(壓入第乙個元素時,直接設定當前 min -> key)

出棧-pop:和以前一樣刪除就行

這樣棧頂元素中的min欄位,儲存的就是棧中的最小值, 刪除也不用額外的比較操作~

棧在o 1 時間獲取最小元素

pop,push裡面都為o 1 這裡只有時間複雜度的要求,但是沒有空間複雜度的要求 思路1 原來的棧裡面只有乙個陣列,來存放所有的push值,現在,多乙個用來存放最小值得棧,如果新進元素的值比最小值棧裡面棧頂的元素要小,就push到最小值棧,其它情況不變。思路2 將放資料的單獨列出,放在乙個類裡面,...

棧的最小值查詢(O1)

對棧增加乙個獲取最小值的方法 getmin 要求,時間複雜度為o 1 定義乙個minindex,儲存最小值的下標。每次push的時候比較大小,如果小於最小值,則minindex修改為當前下標,否則不修改。這樣貌似可以,但是發現乙個嚴重的問題,如果pop操作,把最小值出棧後,minindex就無效了。...

擴充套件堆疊使得O 1 時間求棧的最小值(最大值)

參考 擴充套件stack的實現,完成正常的push,pop操作,新增訪問最小 或最大 元素的介面min 使得push,pop,min的時間複雜度都是o 1 拿到這道題,我們最先的思考往往是,設計乙個演算法從棧中拿到最小值,所以開始考慮任何可以用來實現該功能的排序和查詢演算法。假設棧中有n個元素,一切...