建立一个长度为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),用于存储数组