Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 다이어트 계획 성능


다이어트가 칼로리[i]를 소비한다고 가정하면 이것은 i번째 날의 칼로리를 나타냅니다. 정수 k가 있는 경우 k일의 모든 연속 시퀀스에 대해 즉 (칼로리[i], 칼로리[i+1], ..., 칼로리[i+k-1] for all 0 <=i <=n-k ), 그들은 T를 찾습니다. T는 k일의 해당 시퀀스 동안 소비된 총 칼로리입니다(칼로리[i] + 칼로리[i+1] + ... + 칼로리[i+k-1]):그러나 몇 가지가 있습니다. 조건;

  • T <하한이면 식이요법을 제대로 수행하지 않았으므로 1점을 잃습니다.
  • T> 상한이면 식단을 잘 수행하므로 1점을 얻습니다.
  • 그렇지 않으면 정상적으로 수행되었습니다. 따라서 포인트는 동일합니다.

처음에는 다이어트하는 사람이 0점입니다. 다이어트를 하는 사람이 얻은 총 점수를 찾아야 합니다.

배열이 ​​[6,5,0,0]이고 k =2 및 lower :=1 및 upper :=5이면 출력은 0이 됩니다. C[0] + C[1 ]> 위쪽이므로 한 포인트 증가, 아래쪽 <=C[1] + C[2] <=위쪽이므로 변경 없음, 그 후 C[2] + C[3] <아래쪽이므로 한 포인트 감소하므로 출력 0이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다.

  • 온도 :=0
  • 0 ~ k
      범위의 i에 대해
    • temp :=온도 + C[k]
  • 오른쪽 :=k – 1, 왼쪽 :=0, 점 :=0
  • 오른쪽
  • 온도 <낮으면 1점 감소, 온도> 높으면 1점 증가
  • temp :=temp – C[왼쪽]
  • 왼쪽과 오른쪽으로 1씩 증가
  • 맞는 경우>=길이가 C이면 루프에서 나옵니다.
  • temp :=temp + C[오른쪽]
  • 반품 포인트
  • 예시

    더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −

    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