文章目录
- 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分钟不到写出来的,感觉还可以。