मान लीजिए एक डाइटर calories[i] का उपभोग करता है, यह i-वें दिन की कैलोरी को दर्शाता है। यदि हमारे पास एक पूर्णांक k है, तो k दिनों के प्रत्येक लगातार अनुक्रम के लिए जो (calories[i], calories[i+1], ..., calories[i+k-1] सभी 0 <= i <= n-k के लिए) है, वे T ढूंढते हैं। T उस k दिनों के अनुक्रम के दौरान उपभोग की गई कुल कैलोरी है (calories[i] + calories[i+1] + ... + calories[i+k-1]): लेकिन कुछ शर्तें हैं;
- यदि T < निचली सीमा, तो उन्होंने अपने आहार पर खराब प्रदर्शन किया इसलिए 1 अंक खो दें;
- यदि T > ऊपरी सीमा, तो उन्होंने अपने आहार पर अच्छा प्रदर्शन किया इसलिए 1 अंक प्राप्त करें;
- अन्यथा, उन्होंने सामान्य प्रदर्शन किया। इसलिए अंक समान रहते हैं।
प्रारंभ में, डाइटर के पास शून्य अंक हैं। हमें डाइटर द्वारा प्राप्त कुल अंकों की संख्या ढूंढनी है।
यदि सरणी [6,5,0,0] है और k = 2 और lower := 1 और upper := 5, तो आउटपुट 0 होगा। C[0] + C[1] > upper, इसलिए एक अंक बढ़ाएं, lower <= C[1] + C[2] <= upper इसलिए कोई परिवर्तन नहीं, उसके बाद C[2] + C[3] < lower, इसलिए एक अंक घटाएं, इसलिए आउटपुट 0 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- temp := 0
- i के लिए 0 से k तक
- temp := temp + C[k]
- right := k - 1, और left := 0, और points := 0
- जब 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