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+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告