मान लीजिए कि हमारे पास एक बाइनरी स्ट्रिंग है, और हम किसी भी दो बिट्स को स्वैप कर सकते हैं। हमें सभी 1 को एक साथ समूहबद्ध करने के लिए आवश्यक न्यूनतम संख्या में स्वैप का पता लगाना होगा।
इसलिए, यदि इनपुट s ="0111001" जैसा है, तो आउटपुट 1 होगा, क्योंकि हम ये स्वैप कर सकते हैं:0111001 -> 1111000।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- डेटा:=दिए गए बाइनरी स्ट्रिंग से 0s और 1s की सूची
- एक सेट करें:=0, n:=डेटा सरणी की लंबाई
- आकार n का एक सरणी योग बनाएं, और इसे 0 से भरें, योग सेट करें[0] :=data[0]
- एक:=एक + डेटा[0]
- मैं के लिए 1 से n - 1 की सीमा में
- योग[i] :=योग[i - 1] + डेटा[i]
- एक:=एक + डेटा[i]
- उत्तर:=एक
- बाएं:=0, दाएं:=एक – 1
- जबकि दाएं
- यदि बायां 0 है, तो अस्थायी:=योग[दाएं], अन्यथा अस्थायी:=योग[दाएं] - योग[बाएं - 1]
- उत्तर:=न्यूनतम उत्तर, एक - अस्थायी
- दाएं और बाएं 1 से बढ़ाएं
उदाहरण (पायथन)
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
class Solution(object): def solve(self, s): data = list(map(int, list(s))) one = 0 n = len(data) summ=[0 for i in range(n)] summ[0] = data[0] one += data[0] for i in range(1,n): summ[i] += summ[i-1]+data[i] one += data[i] ans = one left = 0 right = one-1 while right <n: if left == 0: temp = summ[right] else: temp = summ[right] - summ[left-1] ans = min(ans,one-temp) right+=1 left+=1 return ans ob = Solution() s = "0111001" print(ob.solve(s))
इनपुट
"0111001"
आउटपुट
1