Pyhton人数最少的团队

假设对于一个项目,我们有一个称为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的空列表

  • 键:=类似于(value,i)的映射,其中值来自req_skills,而我是数字

  • 对于人数,通过从人员中获取人员并为其分配编号来从人员数组中获得人员对(i,p)-

    • total_skill:=技能组或current_skill

    • 如果total_skill与skill_set相同,则-

    • 如果不使用total_skill或dp [total_skill]的大小>成员的大小+ 1,则

    • 忽略以下部分,跳至下一个迭代

    • dp [total_skill]:=成员+ [i]

    • current_skill:= current_skill或2 ^ key [skill]

    • current_skill:= 0

    • 为了技巧

    • 对于(skill_set,members)对在dp键值对中-

    • return dp [(1 << len(req_skills))

    让我们看下面的实现以更好地理解-

    示例

    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]

    以上是 Pyhton人数最少的团队 的全部内容, 来源链接: utcz.com/z/361729.html

    回到顶部