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

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


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

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

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

  • N := A का आकार
  • graph := दिए गए किनारों को द्विदिशात्मक रूप से जोड़कर एक ग्राफ
  • ans := 0
  • seen := आकार N की एक सूची और False से भरें
  • u के लिए 0 से N तक की रेंज में, करें
    • यदि seen[u] शून्य है, तो
      • queue := एक कतार और u डालें
      • seen[u] := True
      • प्रत्येक node के लिए queue में, करें
        • प्रत्येक nei के लिए graph[node] में, करें
          • यदि seen[nei] गलत है, तो
            • nei को queue के अंत में डालें
            • seen[nei] := True
      • count := एक मैप जिसमें queue में सभी i के लिए B[i] तत्वों की गिनती हो
      • प्रत्येक i के लिए queue में, करें
        • यदि count[A[i]] शून्येतर है, तो
          • count[A[i]] := count[A[i]] - 1
          • ans := ans + 1
  • ans वापस करें

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

उदाहरण

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 < j < डोमिनोज की लंबाई, औ

  1. Python प्रोग्राम से सूची में सबसे छोटी संख्या खोजना Python प्रोग्राम से सूची में सबसे छोटी संख्या खोजना

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

  1. - Python प्रोग्राम से सूची में सबसे बड़ी संख्या खोजना

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