有一个N个整数的数组,和一个长度为M的窗口,窗口从数组内的第一个数开始滑动直到窗口不能滑动为止,
每次窗口滑动产生一个窗口和(窗口内所有数的和),求窗口滑动产生的所有窗口和的最大值。
#include <iostream>
#include <vector>
#include <deque>
#include <algorithm>
using namespace std;
vector<int> func(const vector<int> &nums, int k) {
vector<int> res;
deque<int> que;
for (int i = 0; i < nums.size(); i++) {
while (!que.empty() && nums[i] >= nums[que.back()]) {
que.pop_back();
}
que.push_back(i);
while(que.front() <= i - k) {
que.pop_front();
}
if (i >= k-1) {
res.push_back(nums[que.front()]);
}
}
return res;
}
int main() {
int N, M;
vector<int> vec;
cin >> N;
int t;
for (int i = 0; i < N; i++) {
cin >> t;
vec.push_back(t);
}
cin >> M;
vector<int> res = func(vec, M);
cout << *max_element(res.begin(), res.end());
return 0;
}