Pythonで配列を等しい合計のサブ配列に分割できる合計を見つけます
整数Aの配列があるとします。値sum[i]の場合、配列をsum sum [i]のサブ配列に分割できるように、sumのすべての値を見つける必要があります。配列を等しい合計のサブ配列に分割できない場合は、-1を返します。
したがって、入力がA =[2、4、2、2、2、4、2、6]のような場合、配列は次のサブ配列に分割できるため、出力は[6,8,12]になります。合計6、8、および12。これらは次のとおりです。[{2、4}、{2、2、2}、{4、2}、{6}] [{2、4、2}、{2、2 、4}、{2、6}] [{2、4、2、2、2}、{4、2、6
これを解決するには、次の手順に従います-
-
n:=a
のサイズ -
table:=サイズnで、0で埋められた配列
-
table [0]:=a [0]
-
1からnの範囲のiの場合、実行します
-
table [i]:=a [i] + table [i-1]
-
-
S:=table [n-1]
-
my_map:=新しいマップ
-
0からnの範囲のiの場合、実行
-
my_map [table [i]]:=1
-
-
答え:=新しいセット
-
範囲1から((S)の平方根)+ 1の整数部分のiの場合、do
-
S mod iが0と同じ場合、
-
is_present:=True
-
part_1:=i
-
part_2:=S/iの商
-
part_1からS+1の範囲のjについては、各ステップでpart_1ごとに更新します。
-
jがmy_mapにない場合は、
-
is_present:=False
-
ループから出てきます
-
-
-
is_presentがtrueで、part_1がSと同じでない場合、
-
回答のadd(part_1)
-
-
is_present:=True
-
(S / i)からS + 1までの範囲の商のjについては、各ステップでS // i、do
で更新します。-
jがmy_mapにない場合は、
-
is_present:=False;
-
ループから出てきます
-
-
-
is_presentおよびpart_2がSと同じでない場合、
-
回答のadd(part_2)
-
-
-
-
回答のサイズが0と同じ場合、
-
-1を返す
-
-
回答を返す
例
理解を深めるために、次の実装を見てみましょう-
from math import sqrt def find_sum(a) : n = len(a) table = [0] * n table[0] = a[0] for i in range(1, n) : table[i] = a[i] + table[i - 1] S = table[n - 1] my_map = {} for i in range(n) : my_map[table[i]] = 1 answer = set() for i in range(1, int(sqrt(S)) + 1) : if (S % i == 0) : is_present = True; part_1 = i part_2 = S // i for j in range(part_1 , S + 1, part_1) : if j not in my_map : is_present = False break if (is_present and part_1 != S) : answer.add(part_1) is_present = True for j in range(S // i , S + 1 , S // i) : if j not in my_map: is_present = False; break if (is_present and part_2 != S) : answer.add(part_2) if(len(answer) == 0) : return -1 return answer a = [2, 4, 2, 2, 2, 4, 2, 6] print(find_sum(a))
入力
[2, 4, 2, 2, 2, 4, 2, 6]
出力
{8, 12, 6}
-
配列の合計を見つけるPythonプログラム
この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列が与えられた場合、与えられた配列の合計を計算する必要があります。 ここでは、ブルートフォースアプローチに従うことができます。つまり、リストをトラバースし、各要素を空の合計変数に追加します。最後に、合計の値を表示します。 以下で説明するように、組み込みの合計関数を使用して別のアプローチを実行することもできます。 例 # main arr = [1,2,3,4,5] ans = sum(arr,n) print ('Sum of the array is '
-
nで割った配列乗算のリマインダーを見つけるためのPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 複数の数値と数値入力nが与えられた場合、除算可能なすべての数値にnを掛けた後、余りを出力する必要があります。 アプローチ まず、arr [i]%nのように余りを計算します。次に、この余りに現在の結果を掛けます。 乗算後、オーバーフローを避けるために同じ余りを取ります。これは、モジュラー演算の分配法則に準拠しています。 ( a * b) % c = ( ( a % c ) * ( b % c ) ) % c 例 def findremainder(arr, lens, n): &n