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

पायथन में स्वैपिंग के बाद समकक्ष जोड़े की संख्या को अधिकतम करने का कार्यक्रम

मान लीजिए हमारे पास संख्या A की सूची है और समान लंबाई की संख्या B की सूची है। हमारे पास संख्या C की एक 2D सूची भी है जहां प्रत्येक तत्व [i, j] के रूप का है, यह इंगित करता है कि हम A[i] और A[j] को जितनी बार चाहें स्वैप कर सकते हैं। हमें उन युग्मों की अधिकतम संख्या ज्ञात करनी है जहाँ अदला-बदली के बाद A[i] =B[i]।

इसलिए, यदि इनपुट ए =[5, 6, 7, 8], बी =[6, 5, 8, 7], सी =[[0, 1], [2, 3]] जैसा है, तो आउटपुट 4 होगा, क्योंकि हम A[0] को A[1] के साथ और A[2] को A[3] के साथ स्वैप कर सकते हैं।

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

  • N :=A का आकार
  • ग्राफ :=दिए गए किनारों को दोतरफा जोड़कर एक ग्राफ।
  • उत्तर:=0
  • देखा:=आकार N की एक सूची और गलत से भरें
  • आपके लिए 0 से N की सीमा में, करें
    • यदि देखा जाए[u] शून्य है, तो
      • कतार:=एक कतार और आप डालें
      • देखा[यू] :=सच
      • कतार में प्रत्येक नोड के लिए, करें
        • ग्राफ में प्रत्येक नी के लिए[नोड], करते हैं
          • अगर देखा [नेई] झूठा है, तो
            • कतार के अंत में nei डालें
            • देखा[nei] :=सच
      • गिनती :=एक नक्शा जिसमें कतार में सभी i के लिए B[i] तत्वों की गिनती होती है
      • कतार में प्रत्येक i के लिए, करते हैं
        • अगर गिनती[A[i]] शून्य नहीं है, तो
          • गिनती[ए[i]] :=गिनती[ए[i]] - 1
          • उत्तर:=उत्तर + 1
  • वापसी उत्तर

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

from collections import Counter
class Solution:
   def solve(self, A, B, edges):
      N = len(A)
      graph = [[]
      for _ in range(N)]
         for u, v in edges:
            graph[u].append(v)
            graph[v].append(u)
      ans = 0
      seen = [False] * N
      for u in range(N):
         if not seen[u]:
            queue = [u]
            seen[u] = True
            for node in queue:
               for nei in graph[node]:
                  if not seen[nei]:
                     queue.append(nei)
                     seen[nei] = True
            count = Counter(B[i] for i in queue)
            for i in queue:
               if count[A[i]]:
                  count[A[i]] -= 1
            ans += 1
      return ans
ob = Solution()
A = [5, 6, 7, 8]
B = [6, 5, 8, 7]
C = [[0, 1],[2, 3]]
print(ob.solve(A, B, C))

इनपुट

[5, 6, 7, 8], [6, 5, 8, 7], [[0, 1],[2, 3]]

आउटपुट

4

  1. पायथन में समतुल्य डोमिनोज़ जोड़े की संख्या

    मान लीजिए हमारे पास डोमिनोज़ की एक सूची है। प्रत्येक डोमिनोज़ में दो संख्याएँ होती हैं। दो डोमिनोज़ D[i] =[a, b] और D[j] =[c, d] समान होंगे यदि a =c और b =d, या a =d और b =c। तो एक डोमिनोज़ को उल्टा किया जा सकता है। हमें जोड़े की संख्या (i, j) वापस करनी होगी जिसके लिए 0 <=i

  1. सूची में सबसे छोटी संख्या खोजने के लिए पायथन प्रोग्राम

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें सभी सूची दी गई है, हमें सूची में उपलब्ध सबसे छोटी संख्या प्रदर्शित करने की आवश्यकता है यहां हम या तो सूची को क्रमबद्ध कर सकते हैं और सबसे छोटा तत्व प्राप्त कर सकते हैं या सबसे छोटा तत्व प्राप्त करने के लिए अंतर्न

  1. एक सूची में सबसे बड़ी संख्या खोजने के लिए पायथन कार्यक्रम

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक सूची दी गई है, हमें सूची के सबसे बड़े तत्व की गणना करने की आवश्यकता है। यहाँ हम समस्या कथन के समाधान तक पहुँचने के लिए बिल्ट-इन फ़ंक्शंस की मदद लेंगे सॉर्ट() फ़ंक्शन का उपयोग करना उदाहरण # list list1 = [23,1