题解 | #滑动窗口的最大值#
滑动窗口的最大值
http://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788
对暴力方法的简单优化,添加两个变量保存当前最大值maxNum和最大值在当前所在窗口的位置标志tag。
每次窗口移动则tag减一,如果tag>0,也就是之前的最大值还在窗口内,直接与新添加的值进行比较,更新相应的最大值和位置标志,如果tag<0,则在新的窗口,暴力更新最大值和位置标志。
class Solution {
public:
vector<int> maxInWindows(const vector<int>& num, unsigned int size) {
int maxNum=0,tag=0;
vector<int> menber;
if(size<=0 || size > num.size())return menber;
for(int i = 0; i < size; i++){
if(num[i]>maxNum){
maxNum = num[i];
tag = i;
}
}
menber.push_back(maxNum);
for(int i = size;i < num.size();i++){
tag--;
if(num[i]>=maxNum && tag>=0){
maxNum = num[i];
tag = size-1;
}
if(tag < 0){
maxNum = num[i-size+1];
for(int j = i-size+1;j <=i;j++){
if(num[j]>=maxNum){
maxNum = num[j];
tag = j-(i-size+1);
}
}
}
menber.push_back(maxNum);
}
return menber;
}
};
