模板 資料結構 單調佇列 單調棧

2022-05-07 23:12:19 字數 483 閱讀 6411

一道例題,給定一串數字,求每連續k個數字的最大、最小值。

思路:初始化乙個初始長度為k的單調佇列,按從左到右加入元素,同時滿足這個佇列中的元素是遞減的(也就是假如某個數被兩個距離不超過k的大於他的數夾著,他會被從隊尾調出佇列)。得到最大值。

向右移動一格,假如隊首離開範圍,出隊。往隊尾加入元素前,把隊尾的所有比它小的元素全部出隊。

得到新的最大值。

#includeusing

namespace

std;

struct

monotone_queue

q.push_back(value);

}intfront()

void

pop()

};struct

monotone_stack

s.push(value);

}inttop()

void

pop()

};

資料結構 單調棧與單調佇列

830.單調棧 154.滑動視窗 79.滑動視窗的最大值 單調棧的應用場景 求最近的最值 單調佇列的應用場景 求滑動視窗內的最值 單調佇列步驟 值得注意的是單調佇列存的是下標,方便判斷隊頭是否滑出視窗 1.判斷隊頭是否滑出視窗 2.判斷完之後那麼隊頭就是滑動視窗的最值,處理題目邏輯 順序不一定在2,...

資料結構 單調棧與單調佇列

單調棧是棧內元素具有嚴格單調性的一種資料結構。由於我們要找到每個數左邊第乙個比它小的數,那麼我們便可以發現 對於棧中任意乙個數,如果在它右邊存在乙個數比它小 或相等 那麼這個數便是不可能被選中的,直接彈出棧即可。於是我們便可以進行如下操作 按序列舉每乙個數,準備將當前這個數壓棧時,從棧頂開始遍歷,如...

資料結構 單調棧,單調佇列

乙個單調遞增棧的例子 進棧元素分別為3,4,2,6,4,5,2,3 第i步操作結果1 3進棧3 23出棧,4進棧43 2進棧4 2 42 4出棧,6進棧65 4進棧6 4 64出棧,5進棧 6 57 2進棧6 5 2 82出棧,3進棧 6 5 3 對於乙個元素i 在 尾部 新增元素 while r ...