一道例題,給定一串數字,求每連續k個數字的最大、最小值。
思路:初始化乙個初始長度為k的單調佇列,按從左到右加入元素,同時滿足這個佇列中的元素是遞減的(也就是假如某個數被兩個距離不超過k的大於他的數夾著,他會被從隊尾調出佇列)。得到最大值。
向右移動一格,假如隊首離開範圍,出隊。往隊尾加入元素前,把隊尾的所有比它小的元素全部出隊。
得到新的最大值。
#includeusingnamespace
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 ...