A dieter consumes `calories[i]`

calories on the `i`

-th day. For every consecutive sequence of `k`

days, they look at *T*, the total calories consumed during that sequence of `k`

days:

- If
`T < lower`

, they performed poorly on their diet and lose 1 point; - If
`T > upper`

, they performed well on their diet and gain 1 point; - Otherwise, they performed normally and there is no change in points.

Return the total number of points the dieter has after all `calories.length`

days.

Note that: The total points could be negative.

**Example 1:**

Input:calories = [1,2,3,4,5], k = 1, lower = 3, upper = 3Output:0Explaination: calories[0], calories[1] < lower and calories[3], calories[4] > upper, total points = 0.

**Example 2:**

Input:calories = [3,2], k = 2, lower = 0, upper = 1Output:1Explaination: calories[0] + calories[1] > upper, total points = 1.

**Example 3:**

Input:calories = [6,5,0,0], k = 2, lower = 1, upper = 5Output:0Explaination: calories[0] + calories[1] > upper, calories[2] + calories[3] < lower, total points = 0.

**Constraints:**

`1 <= k <= calories.length <= 10^5`

`0 <= calories[i] <= 20000`

`0 <= lower <= upper`

**Solution: Sliding Window**

Maintain the sum of a sliding window length of k.

Time complexity: O(n)

Space complexity: O(1)

## C++

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Author: Huahua class Solution { public: int dietPlanPerformance(vector<int>& calories, int k, int lower, int upper) { int ans = 0; int t = accumulate(begin(calories), begin(calories) + k - 1, 0); for (int i = k - 1; i < calories.size(); ++i) { if (i >= k) t -= calories[i - k]; t += calories[i]; if (t > upper) ++ans; if (t < lower) --ans; } return ans; } }; |

请尊重作者的劳动成果，转载请注明出处！花花保留对文章／视频的所有权利。

如果您喜欢这篇文章／视频，欢迎您捐赠花花。

If you like my articles / videos, donations are welcome.

## Be First to Comment