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

滑动窗口的最大值

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
};
全部评论

相关推荐

听说改名字就能收到offer哈:Radis写错了兄弟
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务