สมมติว่าผู้อดอาหารบริโภคแคลอรี[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