你的好友是一位健身爱好者。前段日子,他给自己制定了一份健身计划。现在想请你帮他评估一下这份计划是否合理。
他会有一份计划消耗的卡路里表,其中calories[i]给出了你的这位好友在第i天需要消耗的卡路里总量。
一份计划的周期通常是k天,你需要计算他在这k天内消耗的总卡路里T:
- 如果
T < lower,那么这份计划相对糟糕,并失去 1 分; - 如果
T > upper,那么这份计划相对优秀,并获得 1 分; - 否则,这份计划普普通通,分值不做变动。
请返回统计完所有calories.length天后得到的总分作为评估结果。
注意:总分可能是负数。
示例 1:
输入:calories = [1,2,3,4,5], k = 1, lower = 3, upper = 3 输出:0 解释:calories[0], calories[1] < lower 而 calories[3], calories[4] > upper, 总分 = 0.示例 2:
输入:calories = [3,2], k = 2, lower = 0, upper = 1 输出:1 解释:calories[0] + calories[1] > upper, 总分 = 1.示例 3:
输入:calories = [6,5,0,0], k = 2, lower = 1, upper = 5 输出:0 解释:calories[0] + calories[1] > upper, calories[2] + calories[3] < lower, 总分 = 0.提示:
1 <= k <= calories.length <= 10^50 <= calories[i] <= 200000 <= lower <= upper
思路:
题目描述的不清楚,题意里的长度为k的周期,是指每一个长度为k 的周期,
比如对于示例3,所有的周期为[6, 5], [5, 0], [0, 0]。
只需要找到所有的周期和,再将周期和与lower, upper 对比即可。
class Solution(object): def dietPlanPerformance(self, calories, k, lower, upper): """ :type calories: List[int] :type k: int :type lower: int :type upper: int :rtype: int """ res = 0 s = sum(calories[: k]) for start in range(0, len(calories) - (k - 1)): if start != 0: s += calories[start + k - 1] - calories[start - 1] if s < lower: res -= 1 elif s > upper: res += 1 return res