給你乙個整數陣列 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 解釋 滑動視窗的位置...