मान लीजिए कि हमारे पास एक बाइनरी स्ट्रिंग है जिसे बॉक्स कहा जाता है, जहां बॉक्स [i] '0' इंगित करता है कि ith बॉक्स खाली है, और '1' इंगित करता है कि इसमें एक गेंद है। अब, एक ऑपरेशन में, हम एक बॉक्स से एक गेंद को आसन्न बॉक्स में ले जा सकते हैं। ऐसा करने के बाद, कुछ बक्सों में एक से अधिक गेंदें हो सकती हैं। हमें आकार n का एक सरणी उत्तर खोजना है, जहां उत्तर [i] सभी गेंदों को ith बॉक्स में ले जाने के लिए आवश्यक न्यूनतम संख्या में संचालन है।
इसलिए, यदि इनपुट बॉक्स ="1101" जैसा है, तो आउटपुट [4, 3, 4, 5]
होगा।-
सभी गेंदों को पहले बॉक्स पर रखने के लिए, हमें बॉक्स 2 से एक ऑपरेशन और आखिरी गेंद से तीन ऑपरेशन करने होंगे, इसलिए कुल 4 ऑपरेशन करने होंगे।
-
सभी गेंदों को दूसरे बॉक्स पर रखने के लिए, हमें बॉक्स 1 से एक ऑपरेशन और आखिरी गेंद से दो ऑपरेशन लेने होंगे, इसलिए कुल 3 ऑपरेशन करने होंगे।
-
सभी गेंदों को तीसरे बॉक्स पर रखने के लिए, हमें बॉक्स 2 से और आखिरी में एक ऑपरेशन और बॉक्स 1 से दो ऑपरेशन लेने होंगे, इसलिए कुल 4 ऑपरेशन करने होंगे।
-
सभी गेंदों को अंतिम बॉक्स पर रखने के लिए, हमें बॉक्स 1 से तीन ऑपरेशन और बॉक्स 2 से दो ऑपरेशन लेने होंगे, इसलिए कुल 5 ऑपरेशन करने होंगे।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
बाएँ:=0, दाएँ:=0, जिला:=0
-
मैं के लिए 0 से लेकर बक्सों के आकार -1 तक के लिए, करें
-
अगर बॉक्स [i] "1" के समान है, तो
-
जिला:=जिला + आई
-
अगर मैं 0 के समान हूं, तो
-
बाएँ :=बाएँ + 1
-
-
अन्यथा,
-
दाएँ :=दाएँ + 1
-
-
-
-
arr :=एक सूची और शुरू में इसे डिस्टर्ब करें
-
मैं के लिए 1 से लेकर बक्से के आकार -1 तक, करो
-
गिरफ्तारी के अंत में arr[i-1] + बाएँ - दाएँ डालें
-
अगर बॉक्स [i] "1" के समान है, तो
-
बाएँ :=बाएँ + 1
-
दाएँ :=दाएँ - 1
-
-
-
वापसी गिरफ्तारी
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(boxes): left = 0 right = 0 dist = 0 for i in range(len(boxes)): if boxes[i] == "1": dist += i if i == 0: left += 1 else: right += 1 arr = [dist] for i in range(1, len(boxes)): arr.append(arr[i-1] + left - right) if boxes[i] == "1": left += 1 right -= 1 return arr boxes = "1101" print(solve(boxes))
इनपुट
"1101"
आउटपुट
[4, 3, 4, 5]