Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में कॉलम फ्लिप करके टारगेट मैट्रिक्स बनाने के लिए न्यूनतम ऑपरेशन गिनने का प्रोग्राम


मान लीजिए हमारे पास एक मैट्रिक्स M और एक टारगेट मैट्रिक्स T है जिसमें समान संख्या में पंक्तियां और स्तंभ हैं। अब एक ऑपरेशन मान लें जहां हम मैट्रिक्स में एक विशेष कॉलम को फ्लिप करते हैं ताकि सभी 1, 0 में बदल जाएं और सभी 0, 1 में बदल जाएं। तो अगर हम मैट्रिक्स की पंक्तियों को मुफ्त में पुनः क्रमबद्ध कर सकते हैं, तो M को T में बदलने के लिए आवश्यक न्यूनतम ऑपरेशनों की संख्या ढूंढें। यदि कोई समाधान नहीं है, तो -1 वापस करें।

उदाहरण के लिए, यदि इनपुट M = [[0,0],[1,0],[1,1]] और T = [[0,1],[1,0],[1,1]] है, तो आउटपुट 1 होगा।

इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे:

  • nums1 := एक नई सूची, nums2 := एक नई सूची
  • मैट्रिक्स में प्रत्येक पंक्ति के लिए करें:
    • ths := 0
    • जब तक पंक्ति खाली नहीं है, करें:
      • ths := (ths*2) + पंक्ति का अंतिम तत्व, और पंक्ति का अंतिम तत्व हटाएं
    • nums1 के अंत में ths डालें
  • टारगेट में प्रत्येक पंक्ति के लिए करें:
    • ths := 0
    • जब तक पंक्ति शून्येतर है, करें:
      • ths := (ths*2) + पंक्ति का अंतिम तत्व, और पंक्ति का अंतिम तत्व हटाएं
    • nums2 के अंत में ths डालें
  • ret := अनंत
  • nums1 में प्रत्येक num के लिए करें:
    • cts := nums1 में विशिष्ट तत्वों और उनकी आवृत्तियों का मैप
    • cts[num] := cts[num] - 1
    • my_xor := num XOR nums2[0]
    • i को 1 से nums2 के आकार तक के लिए करें:
      • needed := my_xor XOR nums2[i]
      • यदि cts[needed] शून्य है, तो लूप से बाहर निकलें
      • cts[needed] := cts[needed] - 1
    • अन्यथा, ret := min(ret, my_xor के सेट बिट्स की संख्या)
  • ret वापस करें यदि ret अनंत के बराबर नहीं है अन्यथा -1

उदाहरण

class Solution:
    def solve(self, matrix, target):
        nums1 = []
        nums2 = []
        for row in matrix:
            ths = 0
            while row:
                ths = (ths << 1) + row.pop()
            nums1.append(ths)
        for row in target:
            ths = 0
            while row:
                ths = (ths << 1) + row.pop()
            nums2.append(ths)
        ret = float('inf')
        from collections import Counter
        for num in nums1:
            cts = Counter(nums1)
            cts[num] -= 1
            my_xor = num ^ nums2[0]
            for i in range(1, len(nums2)):
                needed = my_xor ^ nums2[i]
                if not cts[needed]:
                    break
                cts[needed] -= 1
            else:
                ret = min(ret, bin(my_xor).count('1'))
        return ret if ret != float('inf') else -1

ob = Solution()
M = [[0,0],[1,0],[1,1]]
T = [[0,1],[1,0],[1,1]]
print(ob.solve(M, T))

इनपुट

M = [[0,0],[1,0],[1,1]] T = [[0,1],[1,0],[1,1]]

आउटपुट

1
  1. - पायथन में स्ट्रिंग को पैलिंड्रोम बनाने के लिए आवश्यक न्यूनतम वर्णों की जांच करने का प्रोग्राम

    मान लीजिए हमारे पास एक स्ट्रिंग s है, हमें सम्मिलित किए जाने वाले न्यूनतम वर्णों की संख्या ढूंढनी है ताकि स्ट्रिंग पैलिंड्रोम बन जाए।इसलिए, यदि इनपुट s = mad जैसा है, तो आउटपुट 2 होगा, क्योंकि हम am सम्मिलित करके madam प्राप्त कर सकते हैं।इसे हल करने के लिए, हम इन चरणों का पालन करेंगे −एक फ़ंक

  1. - पायथन में एक संख्या को दूसरी संख्या में बदलने के लिए आवश्यक न्यूनतम संक्रियाओं की संख्या खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक संख्या start और एक अन्य संख्या end है (start < end), हमें start को end में बदलने के लिए आवश्यक न्यूनतम संक्रियाओं की संख्या ढूंढनी है इन संक्रियाओं का उपयोग करके: 1 से बढ़ाएं 2 से गुणा करें उदाहरण के लिए, यदि इनपुट है start = 5, end = 11, तो आउटपुट होगा 2, क्योंकि हम 2 से ग

  1. - पायथन में एक स्ट्रिंग को दूसरी स्ट्रिंग का सबस्ट्रिंग बनाने के लिए आवश्यक न्यूनतम संक्रियाओं की संख्या खोजने का प्रोग्राम

    मान लीजिए हमारे पास दो स्ट्रिंग्स s और t हैं, हमें s के लिए आवश्यक न्यूनतम संक्रियाओं की मात्रा ढूंढनी है ताकि t, s का सबस्ट्रिंग बन जाए। अब, प्रत्येक संक्रिया में, हम s में किसी भी स्थिति को चुन सकते हैं और उस स्थिति के वर्ण को किसी अन्य वर्ण में बदल सकते हैं। उदाहरण के लिए, यदि इनपुट है s = abbpq