Python中的饮食计划性能


假设一个节食者消耗卡路里[i],这表示第 i 天的卡路里。如果我们有一个整数 k,对于每一段连续的 k 天(对于所有 0 <= i <= n-k 的 calories[i],calories[i+1],...,calories[i+k-1]),他们找到 T。T 是这段连续 k 天内消耗的总卡路里(calories[i] + calories[i+1] + ... + calories[i+k-1]):但有一些条件;

  • 如果 T < 下限,则他们在节食方面表现不佳,因此扣 1 分;
  • 如果 T > 上限,则他们在节食方面表现良好,因此加 1 分;
  • 否则,他们的表现正常。所以分数保持不变。

最初,节食者有零分。我们必须找到节食者获得的总分。

如果数组为 [6,5,0,0],k = 2,lower := 1 且 upper := 5,则输出将为 0。C[0] + C[1] > upper,所以增加一分,lower <= C[1] + C[2] <= upper 所以没有变化,之后 C[2] + C[3] < lower,所以减少一分,所以输出将为 0。

为了解决这个问题,我们将遵循以下步骤 -

  • temp := 0
  • 对于 i 从 0 到 k 的范围
    • temp := temp + C[k]
  • right := k – 1,left := 0,points := 0
  • 当 right < C 的长度时,执行
    • 如果 temp < lower,则 points 减 1,如果 temp > upper,则 points 加 1
    • temp := temp – C[left]
    • left 和 right 各增加 1
    • 如果 right >= C 的长度,则退出循环
    • temp := temp + C[right]
  • 返回 points

示例

让我们看看以下实现以获得更好的理解 -

 在线演示

class Solution(object):
   def dietPlanPerformance(self, c, k, l, u):
      temp = 0
      for i in range(k):
         temp += c[i]
      right = k-1
      left = 0
      points = 0
      while right < len(c):
         if temp<l:
            points-=1
         elif temp>u:
            points+=1
         temp -=c[left]
         left+=1
         right+=1
         if(right >= len(c)):
            break
         temp+=c[right]
      return points
ob1 = Solution()
print(ob1.dietPlanPerformance([6,5,0,0],2,1,5))

输入

[6,5,0,0]
2
1
5

输出

0

更新于: 2020年4月28日

1K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告