admin管理员组文章数量:1794759
【LeetCode
文章目录
- 1、题目描述
- 2、解题思路
- 3、解题代码
1、题目描述
2、解题思路
(下面的天数均为从 0 开始计算,比如第 0 天)
如果计算每一天所对应的 score ,都得计算包含当天在内往后连续 k 天的卡路里,存在相当的的重复计算。
比如:calories = [1,2,3,4,5],k = 3
计算第 0 天时,1+2+3 = 6
计算第 1 天时,2+3+4 = 9
这里的 2+3 就是重复计算。
为了避免重复计算,定义一个累积数组 accumulate[] 来保存累计值。
比如:accumulate[2] 表示0、1、2 共三天的卡路里累积值;accumulate[3] 表示0、1、2、3 共 4 天的卡路里累计值。
于是,当我需要计算第 4 天的连续 3 天的卡路里总量,计算的是4、5、6这三天,只需要:accumulate[6] - accumulate[3] 即可.
1、遍历 calories[] 数组,得到 accumulate[] 数组;
2、第 0 天的后 k 天卡路里总值为 accumulate[k-1] ,直接获取;第 n 天的后 k 天卡路里总值为 accumulate[n]-accumulate[n-k];
3、遍历每一天,比较 lower 和 upper 即可。
3、解题代码
class Solution {public int dietPlanPerformance(int[] calories, int k, int lower, int upper) {int days = calories.length;int[] accumulate = new int[days]; // 第一天到第 n 天累计值accumulate[0] = calories[0];for (int i = 1; i < days; i++) {accumulate[i] = accumulate[i - 1] + calories[i];}int calory;int score = 0;for (int i = k - 1; i < days; i++) {if (i == k - 1) {calory = accumulate[i];}else {calory = accumulate[i]-accumulate[i-k];}if (calory < lower) {score--;} else if (calory > upper) {score++;}}return score;}
}
本文标签: LeetCode
版权声明:本文标题:【LeetCode 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1692815402a209670.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论