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

Pythonで「有効な」配列の最大値を見つけるプログラム


n個の整数'nums'の配列があるとします。 'nums'の各値は、その'power'を表します。配列の長さが2より大きく、配列の最初と最後の値が等しい場合、配列は「有効」と評価されます。残りの要素が条件を満たすことができるように、配列から要素を削除して配列を有効にする必要があります。出力として、アレイのすべての電力値を加算することにより、アレイの可能な最大電力値を返します。

したがって、入力がnums =[3、4、5、3、4]の場合、出力は16になります。

配列numsから最初の値3を削除すると、[4、5、3、4]になります。これは有効な配列であり、累乗の合計は4 + 5 + 3 + 4 =16です。これは、指定された入力からの有効な配列の可能な最大合計です。

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

  • テーブル:=新しいマップ

  • prefix:=値0で初期化された新しいリスト

  • 負:=値0で初期化された新しいリスト

  • インデックスiと値j(nums)ごとに、実行します

    • jがテーブルに存在しない場合、

      • table [j]:=新しいペア(i、0)

      • それ以外の場合

        • table [j、-1]:=i

      • プレフィックス+jの最後の要素に等しい新しい要素をプレフィックスに追加します

      • ネガティブの最後の要素を複製する

      • j <0の場合、

        • 負の最後の要素:=負の最後の要素+ j

  • ans:=負の無限大

  • テーブルのすべての値の各ペア(i、j)について、実行します

    • jが0と同じでない場合、

      • sm1:=prefix [j +1]-prefix [i]

      • j> i + 1の場合、

        • sm2:=ネガティブ[j]-ネガティブ[i + 1]

      • それ以外の場合

        • sm2:=0

      • ans:=最大(ans、sm1-sm2)

  • ansを返す

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

def solve(nums):
   table = {}
   prefix = [0]
   negative = [0]
   for i, j in enumerate(nums):
      if j not in table:
         table[j] = [i, 0]
      else:
         table[j][-1] = i
      prefix += prefix[-1] + j,
      negative += negative[-1],
      if j < 0:
         negative[-1] += j

   ans = float('-inf')
   for i,j in table.values():
      if j != 0:
         sm1 = prefix[j+1] - prefix[i]
         sm2 = negative[j] - negative[i+1] if j > i+1 else 0
         ans = max(ans, sm1 - sm2)
   return ans

print(solve([3, 4, 5, 3, 4]))

入力

[3, 4, 5, 3, 4]

出力

16

  1. 配列内の最大の要素を見つけるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列が与えられたので、配列の最大要素を計算する必要があります。 ここでは、ループ全体をトラバースして最大の要素を計算し、要素を取得するブルートフォースアプローチを使用します。 以下の実装を観察できます。 例 # largest function def largest(arr,n):    #maximum element    max = arr[0]    # traverse the whole loop    for

  2. 配列の合計を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列が与えられた場合、与えられた配列の合計を計算する必要があります。 ここでは、ブルートフォースアプローチに従うことができます。つまり、リストをトラバースし、各要素を空の合計変数に追加します。最後に、合計の値を表示します。 以下で説明するように、組み込みの合計関数を使用して別のアプローチを実行することもできます。 例 # main arr = [1,2,3,4,5] ans = sum(arr,n) print ('Sum of the array is '