मान लीजिए एक बुकस्टोर ओनर का स्टोर कस्टमर्स लिस्ट एंट्रीज मिनट्स के लिए खुला है। हर मिनट, कुछ संख्या में कस्टमर्स (customers[i]) स्टोर में प्रवेश करते हैं, उसके बाद वे सभी उस मिनट के अंत में चले जाते हैं। कुछ मिनटों में, ओनर ग्रंपी होता है। अब यदि ओनर i-वें मिनट पर ग्रंपी है, तो grumpy[i] = 1, अन्यथा grumpy[i] = 0। जब बुकस्टोर ओनर ग्रंपी होता है, तो उस मिनट के कस्टमर्स नाखुश होते हैं, अन्यथा वे खुश होते हैं। बुकस्टोर ओनर को X मिनट तक सीधे खुद को ग्रंपी न रखने की तकनीक पता है। उस तकनीक का उपयोग एक से अधिक बार नहीं किया जा सकता। हमें पूरे दिन खुश कस्टमर्स की अधिकतम संख्या ढूंढनी है। इसलिए यदि इनपुट है: customers = [1,0,1,2,1,1,7,5] और grumpy = [0,1,0,1,0,1] और X = 3, तो आउटपुट 16 होगा। ऐसा इसलिए क्योंकि ओनर अंतिम तीन मिनट के लिए खुद को ग्रंपी नहीं रखेगा। तो खुश कस्टमर्स की अधिकतम संख्या 1 + 1 + 1 + 1 + 7 + 5 = 16 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
i := 0, j := 0, sums := खाली लिस्ट और temp := 0 सेट करें
जब तक j - i + 1 < X
यदि grumpy[j] 1 है, तो temp := temp + customers[j]
j को 1 से बढ़ाएं
sums ऐरे में [temp, i, j] लिस्ट इन्सर्ट करें
i और j को 1 से बढ़ाएं
जब तक j < कस्टमर लिस्ट की लंबाई
यदि grumpy[i - 1] 1 है, तो temp := temp - customers[i - 1]
यदि grumpy[j] 1 है, तो temp := temp + customer[j]
sums ऐरे में [temp, i, j] लिस्ट इन्सर्ट करें
i और j को 1 से बढ़ाएं
sums := इनर लिस्ट्स के पहले एलिमेंट के आधार पर sums ऐरे को सॉर्ट करें
index1 := sums में अंतिम लिस्ट का दूसरा एलिमेंट, index2 := sums में अंतिम लिस्ट का तीसरा एलिमेंट,
i को index1 से index2 तक रेंज में grumpy[i] := 0 सेट करें
ans := 0
i को 0 से customers की लंबाई तक रेंज में
यदि grumpy[i] 0 है, तो ans := ans + customers[i]
ans लौटाएं
उदाहरण
class Solution(object):
def maxSatisfied(self, customers, grumpy, X):
i = 0
j = 0
sums = []
temp = 0
while j-i+1इनपुट
[1,0,1,2,1,1,7,5] [0,1,0,1,0,1,0,1] 3
आउटपुट
16