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

Pythonのラベルからの最大値


アイテムのセットがあるとします。i番目のアイテムには値values[i]とラベルlabels[i]があります。次に、これらのアイテムのサブセットSを取得します。たとえば、-

  • | S | <=num_wanted
  • ラベルLごとに、ラベルLのSに存在するアイテムの数は<=use_limitです。

サブセットSの可能な最大の合計を見つける必要があります。

たとえば、入力がvalues =[5,4,3,2,1]のようで、ラベルが[1,1,2,2,3]、num_wanted =3、use_limit =1の場合、出力は9になります。 。これは、1番目、3番目、5番目の項目でサブセットが選択されたためです。

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

  • 1つのアレイを作成するv
  • 0から値の長さの範囲のiの場合
    • [values [i]、labels[i]]をvに挿入
  • v配列を並べ替える
  • ans:=0、:=空のマップを使用、i:=0
  • num_wantedおよびi
  • v [i、1]が使用マップに存在しない場合
    • num_wantedを1減らします
    • ans:=ans + v [i、0]
    • use [v [i、1]]:=1
  • else use [v [i、1]]
  • num_wantedを1減らします
  • ans:=ans + v [i、0]
  • use [v [i、1]]を1増やします
  • iを1増やします
  • 回答を返す
  • 理解を深めるために、次の実装を見てみましょう-

    class Solution(object):
       def largestValsFromLabels(self, values, labels, num_wanted, use_limit):
          v = []
          for i in range(len(values)):
             v.append([values[i],labels[i]])
          v = sorted(v,key = lambda v:v[0],reverse=True)
          ans = 0
          use = {}
          i = 0
          while num_wanted and i < len(v):
             if v[i][1] not in use:
                num_wanted -=1
                ans+=v[i][0]
                use[v[i][1]] = 1
             elif use[v[i][1]]<use_limit:
                num_wanted -=1
                ans+=v[i][0]
                use[v[i][1]]+=1
             i+=1
          return ans
    ob = Solution()
    print(ob.largestValsFromLabels([5,4,3,2,1],[1,1,2,2,3],3,1))

    入力

    [5,4,3,2,1]
    [1,1,2,2,3]
    3
    1

    出力

    9

    1. Pythonで最大の三角形の領域

      平面上の点のリストがあるとします。 3つの点で形成できる最大の三角形の領域を見つける必要があります。 したがって、入力が[[0,0]、[0,1]、[1,0]、[0,2]、[2,0]]の場合、出力は2になります。 これを解決するには、次の手順に従います- res:=0 N:=ポイントリストのサイズ 0からN-2の範囲のiの場合、do i +1からN-1の範囲のjの場合、do i + 2からNの範囲のkについては、 (x1、y1):=points [i]、 (x2、y2):=points [j]、 (x3、y3):=ポイント[k] res:=resの最大値、0.5 *

    2. Pythonのリーフ値からの最小コストツリー

      正の整数の配列arrがあると仮定し、次のようなすべての二分木を検討します- 各ノードには0個または2個の子があります。 arr配列の値は、ツリーを順番にトラバースする際の各リーフの値に対応します。 各非リーフノードの値は、それぞれその左サブツリーと右サブツリーの最大リーフ値の積に等しくなります。 考慮されるすべての可能な二分木の中で、各非リーフノードの値の可能な最小の合計を見つける必要があります。したがって、入力arrが[6,2,4]の場合、2つのツリーが存在する可能性があるため、出力は32になります- これを解決するには、次の手順に従います- メモと呼ばれる地図を作成する