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

Pythonで最小の絶対和の差を見つけるプログラム


同じサイズの2つの正の値の配列nums1とnums2があるとします。これら2つの配列の絶対和の差は、| nums1 [i] --nums2[i]|の合計です。各0<=i

したがって、入力がnums1 =[2,8,6]、nums2 =[3,4,6]の場合、出力は3になります。これは、2つの可能な最適なソリューションを見つけることができるためです

  • インデックス1の要素をインデックス0の要素に置き換えます:[2,8,6] => [2,2,6]、または

  • インデックス1の要素をインデックス2の要素に置き換えます:[2,8,6]=>[2,6,6]。

両方とも|2-3|の合計差を取得します+(|2-4|または|6-4|)+ | 6-6 | =3.

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

  • nums1がnums2と同じ場合、

    • return(0)

  • minn_diff:=-infinity

  • ind:=-1

  • 0からnums1-1のサイズのiの場合、実行

    • | nums1 [i] -nums2[i]|の場合> minn_diff、次に

      • ind:=i

      • minn_diff:=| nums1 [i]-nums2 [i] |

  • diff:=| nums1 [ind]-nums2 [ind] |

  • index:=ind

  • 0からnums1-1のサイズのiの場合、実行

    • iがindと同じでない場合は、

      • if | nums1 [i]-nums2 [ind] |

        • インデックス:=i

        • diff:=| nums1 [i] -nums2 [ind] |

  • 合計:=0

  • 0からnums1-1のサイズのiの場合、実行

    • iがindと同じ場合、

      • summ:=summ + | nums1 [index]-nums2 [i] |

    • それ以外の場合

      • summ:=summ + | nums1 [i]-nums2 [i] |

  • 合計modを返す(10 ^ 9 + 7)

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

def solve(nums1, nums2):
   if(nums1==nums2):
      return(0)

   minn_diff = float('-inf')
   ind = -1
   for i in range(len(nums1)):
      if(abs(nums1[i]-nums2[i]) > minn_diff):
         ind = i
         minn_diff = abs(nums1[i]-nums2[i])
   
   diff = abs(nums1[ind]-nums2[ind])
   index = ind
   for i in range(len(nums1)):
      if(i!=ind):
         if(abs(nums1[i]-nums2[ind])<diff):
            index = i
            diff = abs(nums1[i]-nums2[ind])

   summ = 0
   for i in range(len(nums1)):
      if(i==ind):
         summ += abs(nums1[index]-nums2[i])
      else:
         summ += abs(nums1[i]-nums2[i])
   return(summ%(10**9 + 7))

nums1 = [2,8,6]
nums2 = [3,4,6]
print(solve(nums1, nums2))

>

入力

[2,8,6], [3,4,6]

出力

3

  1. リスト内のすべてのペア間の絶対差の合計を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 リスト入力が与えられた場合、リスト内のすべてのペア間の絶対差の合計を見つける必要があります。 列挙() メソッドは、反復可能オブジェクトにカウンターを追加し、それを列挙オブジェクトタイプの形式で返します。 この方法では、絶対差を含むリスト「diffs」があります。 2つの変数が初期化された2つのループを使用します。 1つはカウンターを反復処理し、もう1つはリスト要素を反復処理します。すべての反復で、要素が類似しているかどうかを確認します。 そうでない場合は、絶対差を見つけて、それ

  2. 数の因子の最小合計を見つけるためのPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 入力された数値を指定して、指定された数値の因子の最小合計を求めます。 ここでは、すべての因子とそれに対応する合計を計算し、それらの中から最小値を見つけます。 したがって、数の積の最小合計を見つけるために、積の素因数の合計を見つけます。 これが問題の反復実装です- 例 #iterative approach def findMinSum(num):    sum_ = 0    # Find factors of number and add to the sum