求滑動視窗中的最大值和最小值

2021-10-20 01:36:17 字數 808 閱讀 5852

滑動視窗: 一般使用雙指標演算法,左指標l和右指標r之間的空間稱為視窗,由於指標是不斷移動的,從而視窗也可以移動,稱為滑動視窗。

滑動視窗的最值:由於視窗是移動的,移動的過程中有新元素的加入也有舊元素的彈出。每一次元素的加入或彈出都可能使視窗中元素的最值發生變化,也正是會發生變化,使得無法直接獲取任意時刻滑動視窗的最值。

單調佇列求滑動視窗最值:雖然滑動視窗中不斷有新元素加入和舊元素彈出,但是始終都有乙個特點就是新元素都是從右指標r處加入的,舊元素都是從左指標l處彈出的。當乙個元素如果是當前視窗的最大值,則它前面的值就不需要儲存,因為只要它在視窗中,最值就不會變成其他的值,而對於它後面的比它小的元素則要儲存,因為它一點彈出,最大值就要發生變化,需要儲存後面的比它小的值。類似可推最小值。

雙端佇列:使用雙端佇列,維持佇列是乙個單調佇列(最大值: 單調遞增佇列,最小值: 單調遞減佇列),每次最值就是雙端佇列的front

// leetcode 1438. 絕對差不超過限制的最長連續子陣列

dequemaxx;

dequeminn;

while(r < sz)

if (abs(maxx.front() - minn.front()) <= limit)

++r;

}

滑動視窗中的最大值

給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 通過陣列大小和滑動視窗大小可知,存在多少個滑動視窗 size arr size 滑動視窗 1。從陣列的第乙個位置開始遍歷,尋...

判斷滑動視窗中的最大值

問題 給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 分析 1 建立滑動視窗,並初始化化。2 動態更新視窗值 因為視窗是每一次只移動一位,所以每次只需要更新視窗內部指定的一...

Problem E 求最大值和最小值

求出一些整數中的最大值和最小值。輸入為多行,以eof結束。每行為乙個十進位制的數字,全部由0 9組成,每行最長不超過1000個字元。有些數字會以0開頭 不影響數值大小的前導0 輸出為輸入中的最大值和最小值,格式見sample。02010001201223 the maximum value is 2...