Pythonでmを法とする部分配列の最大合計を見つけるプログラム
Pythonでmを法とする部分配列の最大合計を見つけるプログラム
n個の要素を持つ配列numがあるとします。別の整数mがあります。 mを法とするサブ配列の合計の最大値を見つける必要があります。
したがって、入力がnums =[1,5,7,3] m =5のような場合、出力は3になります。
- [1] mod 5 =1
- [5] mod 5 =0
- [7] mod 5 =2
- [3] mod 5 =3
- [1,5] mod 5 =1
- [5,7] mod 5 =2
- [7,3] mod 5 =0
- [1,5,7] mod 5 =3
- [5,7,3] mod 5 =0
- [1,5,7,3] mod 5 =1
これを解決するには、次の手順に従います-
- csum:=リストで、最初にnums [0]modmをリストに挿入します
- 最初の値を除くnumsの各xについて、実行します
- csumの最後に(csum + xの最後の項目)modmを挿入します
- sawed:=最初は0である単一の要素を持つリスト
- max_sum:=-1
- csumの各sについて、
- idx:=リストがソートされるようにsを挿入する左端の位置
- idx <見たサイズの場合、
- max_sum:=max_sumとsの最大値
- それ以外の場合、
- 配列がソートされるように、表示の左端のインデックスにsを挿入します
- 配列がソートされるように、表示の左端のインデックスにsを挿入します
- max_sumを返す
例
理解を深めるために、次の実装を見てみましょう-
import bisect def solve(nums, m): csum = [nums[0] % m] for x in nums[1:]: csum.append((csum[-1] + x) % m) seen = [0] max_sum = -1 for s in csum: idx = bisect.bisect_left(seen, s) if idx < len(seen): max_sum = max(max_sum, s, (s - seen[idx]) % m) else: max_sum = max(max_sum, s) bisect.insort_left(seen, s) return max_sum nums = [1,5,7,3] m = 5 print(solve(nums, m))
入力
"pptpp", [(1,1),(1,4),(1,1),(0,2)]
出力
3
-
Pythonプログラムで配列の合計を見つける
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列の合計を計算するために必要な配列が与えられます。 合計を取得するために各インデックスで配列と要素全体をトラバースするブルートフォースアプローチについては、以下で説明します。合計を取得するための各インデックスについては、以下で説明します。 例 # sum function def sum_(arr,n): # using built-in function return(sum(arr)) # main arr = [11,22,33,44,55,66
-
配列の合計を見つけるPythonプログラム
この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列が与えられた場合、与えられた配列の合計を計算する必要があります。 ここでは、ブルートフォースアプローチに従うことができます。つまり、リストをトラバースし、各要素を空の合計変数に追加します。最後に、合計の値を表示します。 以下で説明するように、組み込みの合計関数を使用して別のアプローチを実行することもできます。 例 # main arr = [1,2,3,4,5] ans = sum(arr,n) print ('Sum of the array is '