मान लीजिए कि एक किताबों की दुकान के मालिक के पास ग्राहकों की सूची प्रविष्टि मिनटों की संख्या के लिए एक स्टोर खुला है। हर मिनट में, कुछ ग्राहक (ग्राहक [i]) स्टोर में प्रवेश करते हैं, उसके बाद वे सभी ग्राहक उस मिनट की समाप्ति के बाद चले जाते हैं। कुछ मिनटों में, मालिक क्रोधी होता है। अब अगर मालिक i-वें मिनट पर क्रोधी है, तो क्रोधी [i] =1, अन्यथा क्रोधी [i] =0। जब किताबों की दुकान का मालिक क्रोधी होता है, तो उस मिनट के ग्राहक दुखी होते हैं, अन्यथा वे खुश होते हैं। किताबों की दुकान का मालिक खुद को सीधे X मिनट तक क्रोधी न रखने की तकनीक जानता है। उस तकनीक का एक से अधिक बार उपयोग नहीं किया जा सकता है। हमें उन ग्राहकों की अधिकतम संख्या ज्ञात करनी है जो दिन भर में खुश रह सकें। तो अगर इनपुट इस तरह है:ग्राहक =[1,0,1,2,1,1,7,5] और क्रोधी =[0,1,0,1,0,1] और एक्स =3, तो आउटपुट 16 होगा। ऐसा इसलिए है क्योंकि मालिक पिछले तीन मिनट के लिए खुद को क्रोधित नहीं करेगा। तो खुश ग्राहकों की अधिकतम संख्या है 1 + 1 + 1 + 1 + 7 + 5 =16
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
मैं सेट करें:=0, जे:=0, रकम:=खाली सूची और अस्थायी:=0
-
जबकि j - i + 1
-
अगर क्रोधी [जे] 1 है, तो अस्थायी:=अस्थायी + ग्राहक [जे]
-
j को 1 से बढ़ाएँ
-
-
एक सूची [अस्थायी, i, j] रकम सरणी में डालें
-
i और j को 1 से बढ़ाएं
-
जबकि j <ग्राहक सूची की लंबाई
-
अगर क्रोधी [i - 1] 1 है, तो अस्थायी:=अस्थायी - ग्राहक [i - 1]
-
अगर क्रोधी [जे] 1 है, तो अस्थायी:=अस्थायी + ग्राहक [जे]
-
एक सूची [अस्थायी, i, j] रकम सरणी में डालें
-
i और j को 1 से बढ़ाएं
-
-
sums :=आंतरिक सूचियों के पहले तत्व के आधार पर रकम की सरणी को क्रमबद्ध करें
-
अनुक्रमणिका1 :=योग में अंतिम सूची का दूसरा तत्व, अनुक्रमणिका2 :=योग में अंतिम सूची का तीसरा तत्व,
-
मैं के लिए अनुक्रमणिका1 से अनुक्रमणिका2 की श्रेणी में क्रोधी सेट करें[i] :=0
-
उत्तर:=0
-
मेरे लिए 0 से लेकर ग्राहकों की लंबाई तक
-
अगर क्रोधी [i] 0 है, तो उत्तर:=उत्तर + ग्राहक [i]
-
-
वापसी उत्तर
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution(object): def maxSatisfied(self, customers, grumpy, X): i = 0 j = 0 sums = [] temp = 0 while j-i+1<X: if grumpy[j]: temp+=customers[j] j+=1 sums.append([temp,i,j]) i+=1 j+=1 while j<len(customers): if grumpy[i-1]: temp-=customers[i-1] if grumpy[j]: temp+=customers[j] sums.append([temp,i,j]) i+=1 j+=1 sums =sorted(sums,key = lambda v : v[0]) index1 = sums[-1][1] index2 = sums[-1][2] for i in range(index1,index2+1): grumpy[i] = 0 ans = 0 for i in range(len(customers)): if not grumpy[i]: ans+=customers[i] return ans ob = Solution() print(ob.maxSatisfied([1,0,1,2,1,1,7,5],[0,1,0,1,0,1,0,1],3))
इनपुट
[1,0,1,2,1,1,7,5] [0,1,0,1,0,1,0,1] 3
आउटपुट
16