239 滑動視窗最大值 使用陣列組成單調棧

2021-10-25 15:26:40 字數 1386 閱讀 3485

給你乙個整數陣列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 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

示例 2:

輸入: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 解釋 滑動視窗的位置...