資料結構 單調棧 單調佇列 解決滑動視窗問題

2022-07-01 08:00:14 字數 1281 閱讀 2885

單調佇列解答:

/*******************

單調佇列!=優先佇列

單調佇列是為了保證佇列內的元素具有單調性,在保持了元素原本順序的同時,對元素進行了過濾,捨棄了會影響單調性的元素

而優先佇列本質上還是個佇列

不會捨棄任何元素,每個元素都在佇列之中,但是在佇列中的位置由優先佇列定義的優先順序來確定,損失了原陣列中的資料相對位置關係。

所以很顯然,單調佇列是解決:尋找在某元素左側區間或者右側區間的最值問題,

而優先佇列的應用是尋找整個區間內的最高優先順序別的內容。

/*******************

#includeusing

namespace

std;

const

int n = 1000010

;int

n, m ,hh , tt;

inta[n];

intq[n];

intmain()

q[ ++tt ] =i;

if( i >= m - 1 ) printf("

%d "

,a[q[hh]]);

}puts(

"");

hh = 0;tt = -1

;

//單調遞減序列

單調棧,類似單調佇列,對不滿足單調性的資料進行篩選確保棧內元素單調

#includeusing

namespace

std;

const

int n = 100010

;int

n,m;

intst[n],tt;

intmain()

else

st[++tt] =x;

}return0;

}

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

乙個單調遞增棧的例子 進棧元素分別為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 ...

單調棧,單調佇列

大多數借鑑了 單調佇列是什麼呢?可以直接從問題開始來展開。poj 2823 給定乙個數列,從左至右輸出每個長度為m的數列段內的最小數和最大數。數列長度 n 106,m n 我們知道,解法 在暴力列舉的過程中,有乙個地方是重複比較了,就是在找當前的f i 的時候,i的前面其它m 1個數在算f i 1 ...

單調棧 單調佇列

單調棧 單調佇列是在棧和佇列的基礎上加上單調結構的資料結構。如果乙個元素入棧或入隊,他會檢查之前的元素,如果之前的元素不可能是答案的解,那麼就彈出元素,使得當前元素入棧或入隊。leetcode 239 滑動視窗最大值 此題是單調佇列,每次遇到乙個元素,一直從隊尾彈出,直到隊尾元素大於該元素為止。還需...