मान लीजिए कि हमारे पास एक बाइनरी सरणी डेटा है, हमें सरणी में किसी भी स्थान पर सभी 1 के संग्रह को एक साथ समूहित करने के लिए आवश्यक स्वैप की न्यूनतम संख्या ज्ञात करनी होगी। तो यदि सरणी [1,0,1,0,1,0,0,1,1,0,1] की तरह है, तो आउटपुट 3 होगा, जैसा कि संभव समाधान है [0,0,0,0, 0,1,1,1,1,1,1]
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक सेट करें:=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 minSwaps(self, data): 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() print(ob.minSwaps([1,0,1,0,1,0,0,1,1,0,1]))
इनपुट
[1,0,1,0,1,0,0,1,1,0,1]
आउटपुट
3