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

Pythonで同じ製品のタプルを見つけるプログラム


一意の正の値を持つ配列numがあるとすると、a * b =c * dとなるタプル(a、b、c、d)の数を見つける必要があります。ここで、a、b、c、およびdはnumの要素です。 、およびすべての要素a、b、c、およびdは別個のものです。

したがって、入力がnums =[2,3,4,6]のような場合、(2,6,3,4)、(2,6,4,3)のようなタプルを取得できるため、出力は8になります。 、(6,2,3,4)、(6,2,4,3)、(3,4,2,6)、(4,3,2,6)、(3,4,6,2) 、(4,3,6,2)。

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

  • dic:=空のマップ。キーが存在しない場合、デフォルト値は0です
  • ans:=0
  • 範囲0からnums-2のサイズのiの場合、do
    • i + 1からnumsのサイズの範囲のjについては、
      • dic [nums [i] * nums [j]]:=dic [nums [i] * nums [j]] + 1
  • dicのすべての値のリストにある各vについて、
    • vが1と同じ場合、
      • 次の反復に進む
    • v:=v-1
    • s:=(v / 2)*(8 + 8 * v)
    • ans:=ans + s
  • 整数としてansを返す

理解を深めるために、次の実装を見てみましょう-

from collections import defaultdict
def solve(nums):
   dic = defaultdict(int)
   ans=0
   for i in range(len(nums)-1):
      for j in range(i+1,len(nums)):
         dic[nums[i]*nums[j]]+=1
   for v in dic.values():
      if v==1:
         continue
      v=v-1
      s=(v/2) * (8+8*v)
      ans+=s
   return int(ans)

nums = [3,4,6,2]
print(solve(nums))

入力

[3,4,6,2]

出力

0

  1. Pythonを使用して、同じラベルを持つサブツリー内のノードの数を見つけるプログラム

    ノードに0からn-1までの番号が付けられたn個のノードを持つルート化された一般ツリーがあるとします。各ノードには、小文字の英字のラベルがあります。ラベルはlabels配列の入力として指定されます。ここで、lables[i]にはi番目のノードのラベルが含まれています。ツリーはエッジリストで表され、各エッジeには[u、v]があり、uは親、vは子を表します。サイズnの配列Aを見つける必要があります。これは、iと同じラベルを持つi番目のノードのサブツリー内のノードの数を表します したがって、入力が次のような場合 ここで、n =5およびlabel=“ ccaca” ルートには同じラベルの子

  2. Pythonで隣接するサブアレイの最大積を見つけるプログラム

    numsという配列があるとすると、最大の積を持つ配列(少なくとも1つの数値を含む)内の連続するサブ配列の要素の積を見つける必要があります。したがって、配列が[1,9,2,0,2,5]の場合、連続するサブ配列[1,9,2]の積が最大になるため、出力は18になります。 これを解決するには、次の手順に従います- max_list:=サイズ番号のリスト、0で埋める min_list:=サイズ番号のリスト、0で埋める min_list:=サイズ番号のリスト、0で埋める 1からnumsの長さのiの場合 max_list [i] =max_list [i-1] * nums [i]、min_li