有读者小伙伴建议讲一下滑动窗口相关题型,因为经常面试会被问到。所以就开了这个系列(所以如果大家有想让分享的题型都可以留言区告诉我,任何事情我觉得都需要有反馈。比如一个错误,你不反馈,我不知道…那就只能这样过去了…)闲话不啰嗦,直接看题!
01、题目分析
第239题:滑动窗口最大值 |
---|
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。 |
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
返回滑动窗口中的最大值所构成的数组。
示例:
输入: 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
本题有一定难度!建议认真阅读
并课后练习~
02、题目分析
本题对于题目没有太多需要额外说明的,应该都能理解,直接进行分析。我们很容易想到,可以通过遍历所有的滑动窗口,找到每一个窗口的最大值,来进行暴力求解。那一共有多少个滑动窗口呢,小学题目,可以得到共有 L-k+1 个窗口。
假设 nums = [1,3,-1,-3,5,3,6,7],和 k = 3,窗口数为6
根据分析,直接完成代码:
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
int len = nums.length;
if (len