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

ประสิทธิภาพแผนการรับประทานอาหารใน Python

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

  • ถ้า T < lower bound แสดงว่าประสิทธิภาพแผนอาหารแย่ จึงเสีย 1 คะแนน
  • ถ้า T > upper bound แสดงว่าประสิทธิภาพดี จึงได้ 1 คะแนน
  • มิฉะนั้น ประสิทธิภาพปกติ คะแนนไม่เปลี่ยน

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

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

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

  • temp := 0
  • for i ในช่วง 0 ถึง k
    • temp := temp + C[k]
  • right := k - 1, left := 0, points := 0
  • while 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