239 滑動視窗的最大值

2021-10-16 22:21:16 字數 1073 閱讀 9693

給你乙個整數陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。

返回滑動視窗中的最大值。

例項1:

輸入:nums = [1,3,-1,-3,5,3,6,7], k = 3

輸出:[3,3,5,5,6,7]

解釋:滑動視窗的位置 最大值

--------------- -----

[1 3 -1] -3 5 3 6 7 3

1 [3 -1 -3] 5 3 6 7 3

1 3 [-1 -3 5] 3 6 7 5

1 3 -1 [-3 5 3] 6 7 5

1 3 -1 -3 [5 3 6] 7 6

1 3 -1 -3 5 [3 6 7] 7

如何模擬視窗的滑動,由於給定了視窗的大小k,並且對於第j個視窗,其視窗內的最大值就是返回陣列的第j個值

使用陣列下標i與k的關係來充當返回結果陣列的索引。即i-k+1>=0時,i-k+1就是返回陣列的小標

對於每乙個視窗,如何求出其最大值

未形成視窗時,如何儲存當前索引及之前的最大值

形成視窗並滑動時,如何更新視窗的最大值

這裡採用雙端佇列的形式來儲存視窗內的最大值

保證雙端佇列內部元素從左到右依次減小

雙端佇列的頭部時陣列nums索引i之前的最大元素

索引i向後移動時,當遇到比此時雙端佇列尾部更大的元素時,彈出元素,將此時的元素加入雙端佇列

class

solution

list.

addlast

(i);

// 保證此時雙端佇列中的最大值就是視窗的最大值

if(list.

peek()

<= i-k)

if(i-k+

1>=0)

}}}

239 滑動視窗最大值

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

239 滑動視窗最大值

239.滑動視窗最大值 solution deque solution maxindex 暴力法的時間複雜度為 o n k 弊端為每次掃瞄視窗的最大值,每兩次掃瞄之間都會存在重複的值比較,已經知道了他們的最大值是誰了,所以要減少比較次數 為什麼新增的是索引 將i加到隊尾 deque.addlast ...

239 滑動視窗最大值

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