题解 | #滑动窗口的最大值#
滑动窗口的最大值
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
};