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

Pythonで循環サブリストの最大合計を見つけるプログラム


numsの数のリストがあると仮定し、numsの開始と終了が隣接しているnumsの循環リストを考えてみましょう。循環リストで空でないサブリストの最大合計を見つける必要があります。

したがって、入力がnums =[2、3、-7、4、5]のような場合、合計が14になるサブリスト[4、5、2、3]を取得できるため、出力は14になります。

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

  • max_sum:=負の無限大、cur_max:=0

  • min_sum:=正の無限大、cur_min:=0

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

    • cur_max:=numの最大値とcur_max+ num

    • max_sum:=max_sumとcur_maxの最大値

    • cur_min:=numの最小値とcur_min+ num

    • min_sum:=min_sumとcur_minの最小値

  • max_sum <=0の場合、

    • max_sumを返す

  • max_sumと(numsのすべての要素の合計-min_sum)の最大値を返します

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

import math
class Solution:
   def solve(self, nums):
      max_sum = -math.inf
      cur_max = 0
      min_sum = math.inf
      cur_min = 0
      for num in nums:
         cur_max = max(num, cur_max + num)
         max_sum = max(max_sum, cur_max)
         cur_min = min(num, cur_min + num)
         min_sum = min(min_sum, cur_min)
      if max_sum <= 0:
         return max_sum
      return max(max_sum, sum(nums) - min_sum)
ob = Solution()
nums = [2, 3, -7, 4, 5]
print(ob.solve(nums))

入力

[2, 3, -7, 4, 5]

出力

14

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

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列の合計を計算するために必要な配列が与えられます。 合計を取得するために各インデックスで配列と要素全体をトラバースするブルートフォースアプローチについては、以下で説明します。合計を取得するための各インデックスについては、以下で説明します。 例 # sum function def sum_(arr,n):    # using built-in function    return(sum(arr)) # main arr = [11,22,33,44,55,66

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

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