239.滑動視窗最大值
solution - deque
solution - maxindex
暴力法的時間複雜度為 o(n*k),弊端為每次掃瞄視窗的最大值,每兩次掃瞄之間都會存在重複的值比較,已經知道了他們的最大值是誰了,所以要減少比較次數
為什麼新增的是索引
// 將i加到隊尾
deque.
addlast
(ri)
;// 檢查視窗的索引是否合法
int li = ri - k +1;
if(li <0)
continue
;// 檢查隊頭的合法性
if(deque.
peekfirst()
< li)
// 設定視窗的最大值
maxes[li]
= nums[deque.
peekfirst()
];}return maxes;
}
public
int[
]maxslidingwindow
(int
nums,
int k)
// li是滑動視窗的最左索引
for(
int li =
0; li < maxes.length; li++)}
else
if(nums[ri]
>= nums[maxidx]
) maxes[li]
= nums[maxidx];}
return maxes;
}
239 滑動視窗最大值
給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。返回滑動視窗中的最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大...
239 滑動視窗最大值
給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。返回滑動視窗中的最大值。高階 示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置...
239 滑動視窗最大值
給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。返回滑動視窗中的最大值。可以想到維護乙個類似單調棧的資料結構,單調佇列,佇列內的資料嚴格單調遞減,因此每次尋找最大值時就直接返回隊頭即可,滿足o ...