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
- i + 1からnumsのサイズの範囲のjについては、
- dicのすべての値のリストにある各vについて、
- vが1と同じ場合、
- 次の反復に進む
- v:=v-1
- s:=(v / 2)*(8 + 8 * v)
- ans:=ans + s
- vが1と同じ場合、
- 整数として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
-
Pythonを使用して、同じラベルを持つサブツリー内のノードの数を見つけるプログラム
ノードに0からn-1までの番号が付けられたn個のノードを持つルート化された一般ツリーがあるとします。各ノードには、小文字の英字のラベルがあります。ラベルはlabels配列の入力として指定されます。ここで、lables[i]にはi番目のノードのラベルが含まれています。ツリーはエッジリストで表され、各エッジeには[u、v]があり、uは親、vは子を表します。サイズnの配列Aを見つける必要があります。これは、iと同じラベルを持つi番目のノードのサブツリー内のノードの数を表します したがって、入力が次のような場合 ここで、n =5およびlabel=“ ccaca” ルートには同じラベルの子
-
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