棧的最小值查詢(O1)

2021-07-25 19:49:08 字數 457 閱讀 6142

對棧增加乙個獲取最小值的方法(getmin),要求,

時間複雜度為o(1)。

定義乙個minindex,儲存最小值的下標。

每次push的時候比較大小,

如果小於最小值,則minindex修改為當前下標,

否則不修改。

這樣貌似可以,但是發現乙個嚴重的問題,

如果pop操作,把最小值出棧後,minindex就無效了。

定義乙個額外的棧minindexstack,儲存每次push和pop操作後的最小值下標。

每次push的時候比較大小,

如果小於最小值,則同時push最小值的下標到minindexstack中,

否則將minindexstack的棧頂元素重複push一次。

每次pop操作,原有棧和額外的棧都pop操作。

這樣用空間換時間的操作完成。

在O 1 找到棧中的最小值

定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 push和pop本來都是o 1 這個不需要擔心,但是獲取最小值的話,如果在棧裡新增乙個成員變數存放最小的元素。每次壓入乙個新元素進棧的時候,如果該元素比當前最小的元素...

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

問題描述 對現在的stack 棧 資料結構進行改進,加乙個min 功能,使之能在常數,即o 1 時間內給出棧中的最小值。可對push 和pop 函式進行修改,但要求其時間複雜度都只能是o 1 解決方案 在棧的每個元素加乙個屬性值 min 用於記錄當前位置下面的元素的最小值 元素的值用key表示 壓棧...

ST演算法詳解 例題 O(1)查詢區間最大最小值

今天學習的是rmq的st演算法,先說明一下它的適用範圍 複雜度是o nlogn 的建表和o 1 的查詢,並且不適用於更新。如果更新的話就用線段樹了,因為st是直接建表了。ps.1 k 2 k 以最大值為例,最小值的初始化過程相同。首先設a是要求區間最值的數列,f i,j 表示從第i個數起連續 1 j...