题解 | #滑动窗口的最大值#
滑动窗口的最大值
https://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788
class Solution {
public:
vector<int> maxInWindows(vector<int>& num, int size) {
if(size>num.size()||size==0||num.size()==0)
return {};
//以上,排除3种特殊情况。
int Ind_max=0;
//以上,窗口最大值的下标。
vector<int> res;
for(int i=1;i<size;i++)
{
if(num[i]>=num[Ind_max])
Ind_max=i;
}
//以上,计算第一个窗口的最大值。
res.push_back(num[Ind_max]);
//以下,已解决第i-1个窗口,考虑第i个窗口。
for(int i=1;i<num.size()-size+1;i++)
{
if(Ind_max<i){
Ind_max=i;
for(int j=i+1;j<i+size;j++)
if(num[j]>=num[Ind_max])
Ind_max=j;
}
//以上,情形一:最大值正好被移出去,重新遍历窗口,求最大值。
else if(num[i+size-1]>=num[Ind_max])
Ind_max=i+size-1;
//以上,情形二:最大值未被移出去,仅需比较最大值和新移入的值即求得窗口最大值。
res.push_back(num[Ind_max]);
}
return res;
}
};
查看15道真题和解析