Pythonの順列から得られる最大合計を見つけるプログラム
配列numsがあり、requests [i] =[start_i、end_i]であるrequestsという別の配列があるとします。これは、i番目の要求がnums [start_i] + nums [start_i + 1] +...+の合計を要求することを表します。 nums [end_i-1] +nums[end_i]。 numのすべての順列の中から、すべての要求の最大合計を見つける必要があります。答えは非常に大きい可能性があるため、10 ^ 9+7を法として返します。
したがって、入力がnums =[10,20,30,40,50]リクエスト=[[1,3]、[0,1]]の場合、出力は190になります。これは、[30 、50,40,20,10]次のようになります:requests [0]から:nums [1] + nums [2] + nums [3] =50 + 40 + 20 =110、およびrequests [1]から:nums [ 0] + nums [1] =30 + 50 =80なので、合計は110 + 80=190です。
これを解決するには、次の手順に従います。
- A:=新しいリスト
- リクエスト内のリクエスト(s、e)ごとに、
- Aの最後にペア(s、0)を挿入します
- Aの最後にペア(e、1)を挿入します
- リストAを並べ替える
- fr:=空の地図
- cnt:=0
- n:=Aのサイズ
- i:=0
- i
- r:=1
- i
- r:=r + 1
- i:=i + 1
- fr [cnt-r]の最後に(pre、p-1)を挿入します
- pre:=p
- cnt:=cnt --r
- fr [cnt + r]の最後に(pre、p)を挿入します
- pre:=p + 1
- fr [k]の各ペア(s、e)について、
- d:=e --s + 1
- ans:=ans +(numsのすべての要素の合計[インデックスiからi + d-1まで])* k
- ans:=ans mod m
- i:=i + d
例
理解を深めるために、次の実装を見てみましょう-
from collections import defaultdict def solve(nums, requests): A = [] for s, e in requests: A.append((s, 0)) A.append((e, 1)) A.sort() fr = defaultdict(list) cnt = 0 n = len(A) i = 0 while i < n: r = 1 while i < n - 1 and A[i+1] == A[i]: r += 1 i += 1 p, flag = A[i] if flag == 0: cnt += r if cnt - r > 0: fr[cnt-r].append((pre, p-1)) pre = p elif flag == 1: cnt -= r fr[cnt+r].append((pre, p)) pre = p+1 i += 1 nums.sort(reverse=True) ks = list(fr.keys()) ks.sort(reverse=True) ans = 0 m = 10**9 + 7 i = 0 for k in ks: for s, e in fr[k]: d = e - s + 1 ans += sum(nums[i:i+d]) * k ans %= m i += d return ans nums = [10,20,30,40,50] requests = [[1,3],[0,1]] print(solve(nums, requests))
入力
[10,20,30,40,50],[[1,3],[0,1]]
出力
190
-
リストの累積合計を見つけるPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが与えられたので、累積合計でリストを作成する必要があります。 次に、以下の実装のソリューションを見てみましょう- 例 # cumulative sum def Cumulative(l): new = [] cumsum = 0 for element in l: cumsum += element new.append(cumsum) &
-
配列の合計を見つけるPythonプログラム
この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列が与えられた場合、与えられた配列の合計を計算する必要があります。 ここでは、ブルートフォースアプローチに従うことができます。つまり、リストをトラバースし、各要素を空の合計変数に追加します。最後に、合計の値を表示します。 以下で説明するように、組み込みの合計関数を使用して別のアプローチを実行することもできます。 例 # main arr = [1,2,3,4,5] ans = sum(arr,n) print ('Sum of the array is '