給你乙個整數陣列nums
,有乙個大小為k
的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的k
個數字。滑動視窗每次只向右移動一位。
返回滑動視窗中的最大值。
示例 1:
輸入:nums = [1,3,-1,-3,5,3,6,7], k = 3輸出:[3,3,5,5,6,7]解釋:滑動視窗的位置 最大值示例 2:--------------- -----
[1 3 -1] -3 5 3 6 731 [3 -1 -3] 5 3 6 731 3 [-1 -3 5] 3 6 751 3 -1 [-3 5 3] 6 751 3 -1 -3 [5 3 6] 761 3 -1 -3 5 [3 6 7]7
輸入:nums = [1], k = 1輸出:[1]示例 3:
輸入:nums = [1,-1], k = 1輸出:[1,-1]示例 4:
輸入:nums = [9,11], k = 2輸出:[11]示例 5:
輸入:nums = [4,-2], k = 2輸出:[4]主體思路還是使用單調棧,維護乙個三個空間大小的單調棧:
類似於滑動視窗的開始結尾,定義兩個值:hh=0,tt=-1;hh頭,tt尾
如果區間長度大於定義視窗
if(hh<=tt && i-q[hh]+1>k) hh++;
則頭往前移一位,也就類似於棧的去頭
找到當前位置在維護的區間中的位置
while(hh<=tt && nums[i]>=nums[q[tt]]) tt--;
將新資料新增進去
q[++tt] = i;
class solution
return pp;
}};
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 解釋 滑動視窗的位置...