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

पायथन में सबसे छोटी पर्याप्त टीम


मान लीजिए एक परियोजना के लिए हमारे पास req_skills नामक आवश्यक कौशल की सूची है, और लोगों की एक सूची है। यहां i-वें लोग people[i] में उस व्यक्ति के कौशल की सूची होती है।

अब मान लीजिए एक पर्याप्त टीम को लोगों के एक समूह के रूप में परिभाषित किया गया है जैसे कि req_skills में हर आवश्यक कौशल के लिए, टीम में कम से कम एक व्यक्ति हो जिसके पास वह कौशल हो। हम इन टीमों को प्रत्येक व्यक्ति के सूचकांक द्वारा दर्शा सकते हैं: उदाहरण के लिए मान लीजिए टीम [0, 1, 3] है जो people[0], people[1], और people[3] के कौशल वाले लोगों को दर्शाती है।

हमें सबसे छोटे संभव आकार की टीम ढूंढनी है।

आप किसी भी क्रम में उत्तर वापस कर सकते हैं। यह गारंटी है कि एक उत्तर मौजूद है।

उदाहरण के लिए, यदि इनपुट req_skills = ["java","flutter","android"], people = [["java"],["android"],["flutter","android"]] है, तो आउटपुट [0,2] होगा।

हल करने के चरण

  • dp := एक मैप, खाली सूची को कुंजी 0 से जोड़ें
  • key := (value,i) जैसा मैप जहां value req_skills से है और i संख्याएं हैं
  • लोगों की सरणी से (i, p) संख्या, व्यक्ति जोड़ी के लिए people लेकर उन्हें संख्या निर्दिष्ट करके:
    • current_skill := 0
    • p में कौशल के लिए:
      • current_skill := current_skill OR 2^key[skill]
    • dp की कुंजी-मान जोड़ी (skill_set, members) के लिए:
      • total_skill := skill_set OR current_skill
      • यदि total_skill, skill_set के बराबर है, तो:
        • निम्न भाग को अनदेखा करें, अगले पुनरावृत्ति पर जाएं
      • यदि total_skill dp में नहीं है या dp[total_skill] का आकार > members का आकार + 1, तो:
        • dp[total_skill] := members + [i]
  • dp[(1 << len(req_skills)) - 1] वापस करें

उदाहरण

class Solution(object):
    def smallestSufficientTeam(self, req_skills, people):
        dp = {0:[]}
        key = {v:i for i,v in enumerate(req_skills)}
        for i,p in enumerate(people):
            current_skill = 0
            for skill in p:
                current_skill |= 1 << key[skill]
            for skill_set, members in dp.items():
                total_skill = skill_set | current_skill
                if total_skill == skill_set:
                    continue
                if total_skill not in dp or len(dp[total_skill]) > len(members) + 1:
                    dp[total_skill] = members + [i]
        return dp[(1 << len(req_skills)) - 1]

ob = Solution()
print(ob.smallestSufficientTeam(["java","flutter","android"], [["java"],["android"],["flutter","android"]]))

इनपुट

["java","flutter","android"] [["java"],["android"],["flutter","android"]]

आउटपुट

[0,2]
  1. पायथन में लीफ से शुरू होने वाली सबसे छोटी स्ट्रिंग पायथन में लीफ से शुरू होने वाली सबसे छोटी स्ट्रिंग

    मान लीजिए हमारे पास एक बाइनरी ट्री का रूट है, प्रत्येक नोड 0 से 25 तक का मान रखता है, जो a से z अक्षरों का प्रतिनिधित्व करते हैं: 0 का मान a दर्शाता है, 1 का मान b दर्शाता है, और इसी तरह। हमें लेक्सिकोग्राफिकली सबसे छोटी स्ट्रिंग ढूंढनी है जो इस ट्री के लीफ से शुरू होती है और रूट पर समाप्त होती है।

  1. पायथन में BST में Kवां सबसे छोटा एलिमेंट पायथन में BST में Kवां सबसे छोटा एलिमेंट

    मान लीजिए हमारे पास एक बाइनरी सर्च ट्री है। हमें उस BST में Kवां सबसे छोटा एलिमेंट ढूंढना है। इसलिए यदि ट्री इस तरह है - इसलिए यदि हम 3रा सबसे छोटा एलिमेंट ढूंढना चाहते हैं, तो k = 3, और परिणाम 7 होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - nodes नामक एक खाली लिस्ट बनाएं solve(root, node

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

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