Python 中的饮食计划效果

pythonserver side programmingprogramming更新于 2025/10/26 21:00:17

假设节食者消耗了卡路里[i],这表示第 i 天的卡路里。如果我们有一个整数 k,对于每个连续的 k 天序列(卡路里[i]、卡路里[i+1]、...、卡路里[i+k-1],对于所有 0 <= i <= n-k),他们会找到 T。T 是该 k 天序列中消耗的总卡路里(卡路里[i] + 卡路里[i+1] + ... + 卡路里[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] <较低,所以减少一个点,所以输出将为 0。

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

  • temp := 0
  • 对于 i 在 0 到 k 范围内
    • temp := temp + C[k]
  • right := k – 1,并且 left := 0,并且 points := 0
  • 当 right < C 的长度时,执行
    • 如果 temp < lower,则将点数减少 1,如果 temp > upper,则将点数增加 1
    • temp := temp – C[left]
    • 将左边和右边各增加 1
    • 如果右边 >= 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

相关文章


有用资源