我使用的是蛮力优化了一点的版本,改进不是很大:
实时记录当前的区间的最大值跟区间索引。
第一个区间,直接获取。
后续区间:
情况1: 当前值比此前最大值大,直接使用当前值跟索引。
情况2:比此前最大值小,再分情况:
情况a:此前最大值还在区间内,仍使用之前最大值跟索引
情况b:不在区间内,更新区间内最大值跟索引
class Solution {
public:
vector<int> maxInWindows(const vector<int>& num, unsigned int size) {
vector<int> res;
if(num.size() < size || num.size() == 0 || size == 0){
return res;
}
int maxVal = num[0];
int maxIndex = 0;
for(int i=1;i<size;i++){
if(num[i] > maxVal){
maxVal = num[i];
maxIndex = i;
}
}
res.push_back(maxVal);
for(int i=size;i<num.size();i++){
if(num[i] >= maxVal){
maxVal = num[i];
maxIndex = i;
res.push_back(maxVal);
}else{
if(i-maxIndex == size){
maxVal = num[maxIndex+1];
maxIndex = maxIndex+1;
for(int j=maxIndex+1;j<i;j++){
if(num[j] > maxVal){
maxVal = num[j];
maxIndex = j;
}
}
res.push_back(maxVal);
}else{
res.push_back(maxVal);
}
}
}
return res;
}
};



京公网安备 11010502036488号