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

Pythonで配列内の素敵なペアを数えるプログラム


負でない値を持つnumsという配列があるとします。配列に存在するインデックスの適切なペアの数を見つける必要があります。答えが大きすぎる場合は、答えmod 10 ^ 9+7を返します。ここで、インデックスのペア(i、j)は、次のすべての条件を満たす場合に適していると言われます。1. 0 <=iと同じ

−ここで、rev()は整数の正の部分のみを反転するため、rev(564)が存在する場合は465を意味しますが、rev(540)が存在する場合は45を返します。

したがって、入力がnums =[97,2,42,11]のような場合、最初のペアには(0,2)と(1,3)の2つのペアがあるため、出力は2になります[97 + rev (42)=97 + 24 =121、および42 + rev(97)=42 + 79=121]および2番目の場合[2+rev(11)=2 + 11=13および11+rev(2)=13]。

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

  • m:=(10 ^ 9)+7

  • dic:=空のマップ。デフォルト値は0です

  • numsのnumごとに、実行します

    • rev:=numの逆

    • dic[num-rev]を1増やします

  • res:=0

  • dicのすべての値のリストにある各valについて、実行します

    • res:=res +(val *(val-1))/2の商

  • resmodmを返す

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

from collections import defaultdict
def solve(nums):
   m = (10**9)+7
   dic = defaultdict(int)
   for num in nums:
      rev=int(str(num)[::-1])
      dic[num-rev]+=1

   res=0
   for val in dic.values():
      res += (val*(val-1)) // 2

   return res % m

nums = [97,2,42,11]
print(solve(nums))

入力

[97,2,42,11]

出力

2

  1. 配列内の反転をカウントするPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが表示されます。必要な反転をカウントして表示する必要があります。 反転カウントは、配列をソートするために必要なステップ数をカウントすることによって取得されます。 次に、以下の実装のソリューションを見てみましょう- 例 # count def InvCount(arr, n):    inv_count = 0    for i in range(n):       for j in range(i + 1, n):  

  2. 配列ローテーション用のPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −テキストとパターンが与えられた場合、パターンのすべての出現とその順列(またはアナグラム)をテキストで印刷する必要があります。 次に、以下の実装のソリューションを見てみましょう- 例 # maximum value MAX = 300 # compare def compare(arr1, arr2):    for i in range(MAX):       if arr1[i] != arr2[i]:       &nbs