1176. 健身计划评估 #
- 标签:数组、滑动窗口
- 难度:简单
题目大意 #
好友给自己制定了一份健身计划。想请你帮他评估一下这份计划是否合理。
给定一个数组 calories
,其中 calories[i]
代表好友第 i
天需要消耗的卡路里总量。再给定 lower
代表较低消耗的卡路里,upper
代表较高消耗的卡路里。再给定一个整数 k
,代表连续 k
天。
- 如果你的好友在这一天以及之后连续
k
天内消耗的总卡路里T
小于lower
,则这一天的计划相对糟糕,并失去1
分。 - 如果你的好友在这一天以及之后连续
k
天内消耗的总卡路里T
高于upper
,则这一天的计划相对优秀,并得到1
分。 - 如果你的好友在这一天以及之后连续
k
天内消耗的总卡路里T
大于等于lower
,并且小于等于upper
,则这份计划普普通通,分值不做变动。
输出最后评估的得分情况。
解题思路 #
固定长度为 k
的滑动窗口题目。具体做法如下:
score
用来维护得分情况,初始值为0
。window_sum
用来维护窗口中卡路里总量。left
、right
都指向数组的第一个元素,即:left = 0
,right = 0
。- 向右移动
right
,先将k
个元素填入窗口中。 - 当窗口元素个数为
k
时,即:right - left + 1 >= k
时,计算窗口内的卡路里总量,并判断和upper
、lower
的关系。同时维护得分情况。 - 然后向右移动
left
,从而缩小窗口长度,即left += 1
,使得窗口大小始终保持为k
。 - 重复 4 ~ 5 步,直到
right
到达数组末尾。
最后输出得分情况 score
。
代码 #
|
|