Giả sử một người ăn kiêng tiêu thụ calories[i], chỉ lượng calo ngày thứ i. Nếu có số nguyên k, với mỗi chuỗi liên tiếp k ngày (calories[i] đến calories[i+k-1] cho 0 ≤ i ≤ n-k), họ tìm T - tổng calo tiêu thụ trong k ngày đó. Có các điều kiện:
- Nếu T < lower bound: thực hiện kém, trừ 1 điểm
- Nếu T > upper bound: thực hiện tốt, cộng 1 điểm
- Ngược lại: bình thường, điểm không đổi
Ban đầu người ăn kiêng có 0 điểm. Cần tìm tổng điểm đạt được.
Ví dụ: mảng [6,5,0,0], k=2, lower=1, upper=5 cho kết quả 0. C[0]+C[1] > upper (+1), C[1]+C[2] trong khoảng (0), C[2]+C[3] < lower (-1), tổng = 0.
Để giải quyết:
- temp := 0
- Với i từ 0 đến k-1: temp += C[i]
- right := k-1, left := 0, points := 0
- Khi right < độ dài C:
- Nếu temp < lower: points -= 1; nếu temp > upper: points += 1
- temp := temp - C[left]
- Tăng left và right lên 1
- Nếu right ≥ độ dài C: thoát vòng lặp
- temp := temp + C[right]
- Trả về points
Ví dụ
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))
Đầu vào
[6, 5, 0, 0] 2 1 5
Kết quả
0