Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pyhtonで最小の十分なチーム


プロジェクトに、req_skillsと呼ばれる必要なスキルのリストと人のリストがあるとします。ここで、i番目の人[i]には、その人が持っているスキルのリストが含まれています。

ここで、十分なチームが、req_skillsで必要なスキルごとに、そのスキルを持っているチームに少なくとも1人の人がいるような一連の人として定義されているとします。これらのチームは、各人のインデックスで表すことができます。たとえば、チームが[0、1、3]であるとすると、これはスキルを持つ人[0]、人[1]、人[3]を表します。

>

可能な限り最小のサイズのチームを見つける必要があります。

回答は任意の順序で返すことができます。答えが存在することが保証されています。

したがって、入力がreq_skills =["java"、 "flutter"、 "android"]のようである場合、people =[["java"]、["android"]、["flutter"、 "android"]]、出力は[0,2]

になります

これを解決するには、次の手順に従います-

  • dp:=1つのマップ、キー0に対応する空のリストを追加

  • key:=(value、i)のようなマップ。ここで、valueはreq_skillsからのものであり、iは数値です

  • 番号の場合、人を取得して番号を割り当てることにより、人の配列からの人のペア(i、p)-

    • current_skill:=0

    • pのスキルのために

      • current_skill:=current_skillまたは2^ key [skill]

    • for(skill_set、members)pair is in dp key-value pair-

      • total_skill:=skill_setまたはcurrent_skill

      • total_skillがskill_setと同じ場合、-

        • 次の部分を無視し、次の反復にスキップします

      • total_skillがdoまたはdp[total_skill]のサイズ>メンバーのサイズ+1でない場合、

        • dp [total_skill]:=メンバー+ [i]

  • dp [(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. PythonのBSTでK番目に小さい要素

    二分探索木があるとします。そのBSTでK番目に小さい要素を見つける必要があります。したがって、ツリーが次のような場合- したがって、3番目に小さい要素を見つけたい場合、k =3であり、結果は7になります。 これを解決するには、次の手順に従います- ノードと呼ばれる空のリストを1つ作成します solve(root、nodes)を呼び出す return k –ノードの1番目の要素 solveメソッドが作成されます。これはルートとノードの配列を取得します。これは次のように機能します- rootがnullの場合は、戻ります solve(ルートの左側、ノード) ルートの値をノード配列に追

  2. リスト内の最小数を見つけるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが表示されます。リストで利用可能な最小の番号を表示する必要があります ここでは、リストを並べ替えて最小の要素を取得するか、組み込みのmin()関数を使用して最小の要素を取得できます。 次に、以下の実装の概念を観察しましょう- 例 list1 = [101, 120, 104, 145, 99] # sorting using built-in function list1.sort() print("Smallest element is:", list1[0]) 出力 Smal