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

पायथन में बिना शिकारी वाले जानवरों की न्यूनतम संख्या गिनने का प्रोग्राम


मान लीजिए हमारे पास nums नामक संख्याओं की एक सूची है जहां nums[i] iवें जानवर के शिकारी को दर्शाता है और यदि कोई शिकारी नहीं है, तो यह -1 रखेगा। हमें जानवरों के समूहों की सबसे छोटी संख्या ढूंढनी है जैसे कि कोई जानवर अपने प्रत्यक्ष या अप्रत्यक्ष शिकारी के साथ एक ही समूह में न हो।

इसलिए, यदि इनपुट nums = [1, 2, -1, 4, 5, -1] जैसा है, तो आउटपुट 3 होगा, क्योंकि हमारे पास [0, 3], [1, 4], [2, 5] जैसे समूह हो सकते हैं।

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

  • यदि A खाली है, तो

    • 0 वापस करें

  • adj := एक खाली मैप

  • vis := एक नया सेट

  • roots := एक नई सूची

  • प्रत्येक इंडेक्स i और मान a के लिए A में, करें

    • यदि a, -1 के समान है, तो

      • i को roots के अंत में जोड़ें

    • a को adj[i] के अंत में जोड़ें

    • i को adj[a] के अंत में जोड़ें

  • best := -infinity

  • प्रत्येक root के लिए roots में, करें

    • stk := एक स्टैक और इसमें [root, 1] डालें

    • जब तक stk खाली नहीं है, करें

      • (node, d) := stk का पॉप किया गया तत्व

      • यदि node, vis में है या node, -1 के समान है, तो

        • लूप से बाहर निकलें

      • best := best और d का अधिकतम

      • node को vis में जोड़ें

      • प्रत्येक u के लिए adj[node] में, करें

        • (u, d + 1) को stk में पुश करें

  • best वापस करें

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

उदाहरण

from collections import defaultdict class Solution:    def solve(self, A):       if not A:          return 0       adj = defaultdict(list)       vis = set()       roots = []       for i, a in enumerate(A):          if a == -1:             roots.append(i)          adj[i].append(a)          adj[a].append(i)       best = -float("inf")       for root in roots:       stk = [(root, 1)]       while stk:          node, d = stk.pop()          if node in vis or node == -1:             continue          best = max(best, d)          vis.add(node)          for u in adj[node]:             stk.append((u, d + 1))    return best ob = Solution() nums = [1, 2, -1, 4, 5, -1] print(ob.solve(nums))

इनपुट

[1, 2, -1, 4, 5, -1]

आउटपुट

3

  1. - Python में दो मैप्स में ओवरलैपिंग द्वीपों की संख्या गिनने का प्रोग्राम

    मान लीजिए हमारे पास दो बाइनरी मैट्रिक्स mat1 और mat2 हैं। यहां 1 भूमि दर्शाता है और 0 पानी, यदि 1 (भूमि) का एक समूह पानी से घिरा हुआ है तो उसे द्वीप कहा जाता है। हमें उन द्वीपों की संख्या ज्ञात करनी है जो mat1 और mat2 दोनों में ठीक उन्हीं निर्देशांकों पर मौजूद हैं। इसलिए, यदि इनपुट है mat1 = [[1,0,

  1. - Python प्रोग्राम - स्ट्रिंग में विशिष्ट सबस्ट्रिंग की संख्या गिनें

    एक स्ट्रिंग s दी गई है, हमें s के विशिष्ट गैर-खाली सबस्ट्रिंग की संख्या खोजनी है। उदाहरण इनपुट: s = abaa आउटपुट: 8 व्याख्या: सबस्ट्रिंग हैं [a, b, ab, ba, aa, aba, baa, abaa]। एल्गोरिदम (ट्राई/प्रीफिक्स ट्री) trie := {} (खाली डिक्शनरी) n := len(s) i 0 से n-1 तक: curr := trie j i से n-1

  1. पायथन में ऐरे में x से बड़े सभी वैल्यूज को फ़िल्टर करने का प्रोग्राम पायथन में ऐरे में x से बड़े सभी वैल्यूज को फ़िल्टर करने का प्रोग्राम

    मान लीजिए हमारे पास nums नामक संख्याओं की सूची है। हमारे पास x नामक एक और संख्या भी है। हमें nums से उन सभी नंबरों को फ़िल्टर करके ढूंढना है जो x से कम हैं। पायथन में filter() मेथड होता है जो फंक्शन को आर्गुमेंट के रूप में लेता है और इस फंक्शन का उपयोग करके फ़िल्टर करता है। तो, यदि इनपुट nums = [1,5