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

Pythonで同じ合計の3つの重複しないサブリストの最大合計を見つけるプログラム


numsと呼ばれる数値のリストと別の値kがあるとすると、サイズkの指定されたリストの3つの重複しないサブリストの最大の合計を見つける必要があります。

したがって、入力がnums =[2、2、2、-6、4、4、4、-8、3、3、3] k =3のような場合、出力は27になり、サブリスト[2、2、2]、[4、4、4]、および[3、3、3]、合計は27です。

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

  • P:=[0]
  • Aのxごとに、
    • Pの最後にP[-1]+xを挿入します
  • Q:=[P [i + K] --P [i] for i in range 0 to size of P --K]
  • プレフィックス:=Q[インデックス0から終了まで]
  • サフィックス:=Q[インデックス0から終了まで]
  • 範囲0からQ-1のサイズのiの場合、実行
    • prefix [i + 1]:=プレフィックスの最大値[i + 1]、プレフィックス[i]
    • 接尾辞[〜(i + 1)]:=接尾辞の最大値[〜(i + 1)]、接尾辞[〜i]
  • ret =(Q[i]+プレフィックス[i-K]+サフィックス[i+K])KからQ-K-1のサイズまでの各iに対して
  • retの最大値を返す

例(Python)

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

class Solution:
   def solve(self, A, K):
      P = [0]
      for x in A:
         P.append(P[-1] + x)
      Q = [P[i + K] - P[i] for i in range(len(P) - K)]
      prefix = Q[:]
      suffix = Q[:]
      for i in range(len(Q) - 1):
         prefix[i + 1] = max(prefix[i + 1], prefix[i])
         suffix[~(i + 1)] = max(suffix[~(i + 1)], suffix[~i])
      return max(Q[i] + prefix[i - K] + suffix[i + K] for i in range(K, len(Q) - K))
ob = Solution()
nums = [2, 2, 2, -6, 4, 4, 4, -8, 3, 3, 3]
k = 3
print(ob.solve(nums, k))

入力

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

出力

27

  1. リストの累積合計を見つけるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが与えられたので、累積合計でリストを作成する必要があります。 次に、以下の実装のソリューションを見てみましょう- 例 # cumulative sum def Cumulative(l):    new = []    cumsum = 0    for element in l:       cumsum += element       new.append(cumsum) &

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

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