文章目錄
- 1、問題
- 2、示例
- 3、解決方法
- (1)方法1——雙指針
- 總結
1、問題
給你一個整數數組 nums,有一個大小為 k 的滑動窗口從數組的最左側移動到數組的最右側。你只可以看到在滑動窗口內的 k 個數字。滑動窗口每次只向右移動一位。
返回 滑動窗口中的最大值 。
2、示例
示例 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
示例 2:
輸入:nums = [1], k = 1
輸出:[1]
3、解決方法
(1)方法1——雙指針
let nums = [1,3,-1,-3,5,3,6,7], k = 3
var maxSlidingWindow = function(nums, k) {// 1-1:定義左右指針(右指針 = 滑動窗口長度 = k的長度)let left = 0;right= k;let maxArray = [] // 1-2:定義一個接收最大值的數組let temp; // 1-3 定義一個接收左右指針切割后的數組// 2-1:遍歷判斷 右指針 小于等于 數組的長度while(right <= nums.length){// 3-1: 根據左右指針切割數組賦值給temptemp = nums.slice(left, right);// 3-2 將切割的數組獲取最大值let max = Math.max(...temp)// 3-3 將獲取的最大值插入到數組中maxArray.push(max);// 2-2 :左右指針 自增left++right++}// 4:返回最大值數組console.log('最大值的數組', maxArray);
};
maxSlidingWindow(nums, k);
總結
(1)難度: 困難(如果你了解了雙指針思路的話:中等)
(2)相同文章:
每天一道算法題(八)——找出字符串中無重復字符的最長子串
每天一道算法題(九)——尋找字符串中所有字母異位詞的子串
每天一道算法題(十)——獲取和為k的子數組
(3)其他:20分鐘不到寫出來的,感覺還可以。