建立一个长度为c的滑动窗口并维护它的左、右端点以及总和
不断地移动窗口并计算当前窗口总和,如果小于等于 t 则计数加1
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, t, c;
while (cin >> n >> t >> c) {
vector<int> a;
int ai;
for (int i = 0; i < n; i++) {
cin >> ai;
a.push_back(ai);
}
int currSum = 0;
for (int i = 0; i < c; i++) {
currSum += a[i];
}
int ans = 0;
int left = 0, right = c - 1;
while (right < n) {
if (currSum <= t) {
ans++;
}
currSum -= a[left];
left++;
right++;
currSum += a[right];
}
cout << ans << endl;
}
return 0;
}
时间复杂度:O(n),用于遍历数组
空间复杂度:O(n),用于存储数组

京公网安备 11010502036488号