每天一道算法题(十一)——滑动窗口最大值_困难(中等)

文章目录


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------双指针

javascript 复制代码
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: 根据左右指针切割数组赋值给temp
        temp = 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分钟不到写出来的,感觉还可以。

相关推荐
UIU11411 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
论文复现现场11 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
ZhengEnCi11 小时前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
秋天的怀念_David12 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
碧海银沙音频科技研究院13 小时前
在PC电脑上用Whisper→Marian算法实现离线语音翻译功能
算法·whisper
niyongsheng13 小时前
3D 装箱算法工程化:数据结构、放置启发式与支撑规则
数据结构·算法·rust
j7~16 小时前
【穷举、深搜与回溯算法】一棵决策树讲透全排列与子集
数据结构·c++·算法·leetcode·回溯·递归
傅科摆 _ py17 小时前
DP,贪心,堆和栈,二分力扣复习
开发语言·python·算法
Shaoshing17 小时前
LeetCode100 42.接雨水
java·算法·leetcode
域限奇点访客18 小时前
用AI生成问卷的网站怎么选?看题目录入结构、题型映射和生成后的校验
算法