admin管理员组

文章数量:1794759

【LeetCode

【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