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