মনে করুন একজন ডায়েটার calories[i] ক্যালরি গ্রহণ করেন, যা i-তম দিনের ক্যালরি নির্দেশ করে। যদি একটি পূর্ণসংখ্যা k থাকে, তবে প্রতিটি ক্রমাগত k দিনের সিকোয়েন্সের জন্য (calories[i] + ... + calories[i+k-1]) মোট ক্যালরি T বের করা হয়। কিন্তু কিছু শর্ত আছে:
- যদি T < lower bound, তবে ডায়েটার খারাপ পারফর্ম করেছে, ১ পয়েন্ট কমাবে;
- যদি T > upper bound, তবে ডায়েটার ভালো পারফর্ম করেছে, ১ পয়েন্ট পাবে;
- অন্যথায়, ডায়েটার সাধারণ পারফর্ম করেছে। পয়েন্ট একই থাকে।
প্রাথমিকভাবে ডায়েটারের শূন্য পয়েন্ট থাকে। আমাদের ডায়েটারের মোট অর্জিত পয়েন্ট বের করতে হবে।
যদি অ্যারে [6,5,0,0] এবং k=2, lower=1, upper=5 হলে আউটপুট হবে ০। C[0]+C[1] > upper, তাই ১ পয়েন্ট বাড়ল, lower ≤ C[1]+C[2] ≤ upper তাই পরিবর্তন নেই, পরে C[2]+C[3] < lower, তাই ১ পয়েন্ট কমল, মোট ০।
এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব:
- temp := 0
- for i in range 0 to k
- temp := temp + C[i]
- right := k-1, left := 0, points := 0
- যখন right < C দৈর্ঘ্য
- যদি temp < lower, points ১ কমান, যদি temp > upper, points ১ বাড়ান
- temp := temp - C[left]
- left এবং right ১ বাড়ান
- যদি 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