滑動視窗的最大值

2021-08-02 14:25:27 字數 815 閱讀 4366

題目:

有乙個整型陣列 arr 和乙個大小為 w 的視窗從陣列的最左邊滑到最右邊,視窗每次向右邊滑乙個位置。 返回乙個長度為n-w+1的陣列res,res[i]表示每一種視窗狀態下的最大值。 以陣列為[4,3,5,4,3,3,6,7],w=3為例。因為第乙個視窗[4,3,5]的最大值為5,第二個視窗[3,5,4]的最大值為5,第三個視窗[5,4,3]的最大值為5。第四個視窗[4,3,3]的最大值為4。第五個視窗[3,3,6]的最大值為6。第六個視窗[3,6,7]的最大值為7。所以最終返回[5,5,5,4,6,7]。

給定整形陣列arr及它的大小n,同時給定w,請返回res陣列。保證w小於等於n,同時保證陣列大小小於等於500。

測試樣例:

[4,3,5,4,3,3,6,7],8,3

返回:[5,5,5,4,6,7]

基本思想:

定義乙個雙端佇列qmax,然後依次遍歷整形陣列arr的每個數arr[i]。

如果當前qmax為空,則直接將當前遍歷的arr[i]的下標i放到qmax的隊尾。

如果當前qmax不為空,則比較arr[i]與qmax的隊尾下標在arr陣列對應的值arr[j]的大小。

如果arr[i]

如果arr[i]>=arr[j],則依次將qmax對尾下標依次彈出,直到arr[i]

這樣在遍歷的過程中,qmax隊首的值就一直是滑動視窗的最大值。如果出現qmax隊首的值滑出滑動視窗,則將qmax隊首的值彈出。

**如下:

class slidewindow 

}return res;

}};

滑動視窗最大值

題目描述 給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 幾個注意點 利用雙端佇列實現,如果後者比前者大,前者丟擲,後者進,如果比前者小,壓入佇列,判斷隊頭是否過期,這就需...

滑動視窗最大值

給定乙個陣列和滑動視窗的大小,請找出所有滑動視窗裡的最大值。public class 滑動視窗的最大值 if num.length size size 1 用來儲存可能是滑動視窗最大值的數字的下標 linkedlist indexdeque newlinkedlist for int i 0 i s...

滑動視窗最大值

給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。返回滑動視窗中的最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大...