题解 | #滑动窗口的最大值#

滑动窗口的最大值

http://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788

初始化处理前3个数的最大值,这样后续处理的每个数都有对应的窗口及最大值 也就是后续处理的每个数都应该是当前窗口的边界值 以 2 3 4 2 6 2 为例 初始化处理前3个数: 2 3 4 后续处理第一个数 2 而2恰好是当前窗口3 4 2的边界值

function maxInWindows(num, size)
{
    // write code here
    //窗口大于数组长度或窗口长度为0的时候,返回空
    if(size> num.length || size===0) return [];
    let maxNum=num[0];
    let tmp=0; //记录maxNum的index位置
    let result =[];
    //这是处理首个窗口
    for(let i=0;i<size;i++){//在滑动窗口中进行判断
        if(num[i]>maxNum){
            tmp=i;
            maxNum=num[i];
        }
    }
    result.push(maxNum)
    //后续处理
    for(let j=size;j<num.length;j++){
        if(num[j]>=maxNum){
            maxNum=num[j];
            tmp=j;
        }else{
            if(j-size+1>tmp){// 这意味着之前的maxNum已经脱离窗口了 我们要从j-size+1位置重新寻找
                maxNum=num[j-size+1];
                for(let i=j-size+1;i<j+1;i++){
                    if(num[i]>maxNum){
                        tmp=i;
                        maxNum=num[i];
                    }
                }
            }
        }
        result.push(maxNum)
    }
    return result
}
module.exports = {
    maxInWindows : maxInWindows
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-04 18:25
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-04 15:36
点赞 评论 收藏
分享
06-12 16:00
天津大学 Java
牛客30236098...:腾讯坏事做尽,终面挂是最破防的 上次被挂了后我连简历都不刷了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务