Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ประสิทธิภาพของแผนอาหารใน Python


สมมติว่าผู้อดอาหารบริโภคแคลอรี[i] ค่านี้จะระบุแคลอรีในวันที่ i หากเรามีจำนวนเต็ม k สำหรับทุก ๆ ลำดับที่ต่อเนื่องกันของ k วัน นั่นคือ (แคลอรี[i], แคลอรี[i+1], ..., แคลอรี[i+k-1] สำหรับทั้งหมด 0 <=i <=n-k ) พวกเขาพบว่า T. The T คือแคลอรีทั้งหมดที่บริโภคในช่วงเวลา k วันนั้น (แคลอรี[i] + แคลอรี[i+1] + ... + แคลอรี[i+k-1]):แต่มีบางส่วน เงื่อนไข;

  • ถ้า T <ขอบล่าง พวกเขาทานอาหารได้ไม่ดี เสีย 1 คะแนน
  • ถ้า T> ขอบบน พวกเขาทานอาหารได้ดี เลยได้ 1 คะแนน
  • ไม่อย่างนั้นก็เล่นได้ตามปกติ คะแนนเท่ากัน

ตอนแรกผู้อดอาหารมีคะแนนเป็นศูนย์ เราต้องหาจำนวนคะแนนทั้งหมดที่ผู้อดอาหารได้รับ

หากอาร์เรย์เป็น [6,5,0,0] และ k =2 และต่ำกว่า :=1 และบน :=5 ผลลัพธ์จะเป็น 0 C[0] + C[1 ]> บนดังนั้นเพิ่มจุดหนึ่ง, ล่าง <=C[1] + C[2] <=บนดังนั้นไม่มีการเปลี่ยนแปลงหลังจากนั้น C[2] + C[3] <ต่ำกว่าดังนั้นลดลงหนึ่งจุดดังนั้นผลลัพธ์ จะเป็น 0

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • อุณหภูมิ :=0
  • สำหรับฉันอยู่ในช่วง 0 ถึง k
    • อุณหภูมิ :=อุณหภูมิ + C[k]
  • ขวา :=k – 1 และซ้าย :=0 และคะแนน :=0
  • ขณะขวา <ความยาวของ C ทำ
    • ถ้า temp <ต่ำกว่า ให้ลดจุดลง 1 ถ้า temp> บน จะเพิ่มคะแนนขึ้น 1
    • อุณหภูมิ :=อุณหภูมิ – C[ซ้าย]
    • เพิ่มขึ้นซ้ายและขวา 1
    • ถ้าใช่>=ความยาวของ C แล้วออกจากลูป
    • อุณหภูมิ :=อุณหภูมิ + 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