Pythonで合計が等しい3つの部分に配列を分割する
整数の配列Aがあるとすると、合計が等しい3つの空でない部分に配列を分割できる場合にのみ、出力はtrueになります。
正式には、(A [0] + A [1] + ... +A[i]がA[i+ 1] + A[と同じであるインデックスi+1
したがって、入力が[0,2,1、-6,6、-7,9,1,2,0,1]の場合、出力はtrueになります。 3つの配列は、[0,2,1]、[-6,6、-7,9,1]、および[2,0,1]
になります。これを解決するには、次の手順に従います-
- temp:=すべての要素の合計、およびrequired_sum:=temp / 3
- sum_leftを設定して累積合計を左から右に保存します
- sum_rightを設定して累積合計を右から左に保存します
- index1:=0およびindex2:=配列の長さ– 1
- while index1
- while index1
- index1:=index1 + 1
- index2:=index2 – 1
例
理解を深めるために、次の実装を見てみましょう-
class Solution(object): def canThreePartsEqualSum(self, A): temp = sum(A) if (temp%3 != 0): return 0 sum_left=[0 for i in range(len(A))] sum_left[0] = A[0] sum_right=[0 for i in range(len(A))] sum_right[-1] = A[-1] for i in range(1,len(A)): sum_left[i] = A[i]+sum_left[i-1] for i in range(len(A)-2,-1,-1): sum_right[i] = A[i]+sum_right[i+1] #print(sum_left,sum_right) required_sum = temp/3 index1 = 0 index2 = len(A)-1 while index1 < index2: while index1 <index2 and sum_left[index1]!=required_sum: index1+=1 while index2>index1 and sum_right[index2]!=required_sum: index2-=1 return index1<index2 and index1 != index2 ob1 = Solution() print(ob1.canThreePartsEqualSum([0,2,2,-6,6,-7,9,2,2,0,2]))
入力
[0,2,1,-6,6,-7,9,1,2,0,1]
出力
true
-
Pythonの配列パーティションI
2n個の整数の配列があるとすると、これらの整数を(a1、b1)、(a2、b2)、...、(an、bn)のようにn組の整数にグループ化する必要があります。 (ai、bi)1からnの範囲内のすべてのiに対して可能な限り大きい。したがって、入力が[1、4、3、2]の場合、出力は4になります。したがって、nは2です。ペアの最大合計は4です。これはmin(1、2)+ min(3、4)です。 =4 これを解決するには、次の手順に従います- nは配列のサイズです 配列を並べ替える 回答:=0 0からnの範囲のiの場合、2ジャンプします answer:=answer + array [i]
-
Pythonでテキストファイルをリストまたは配列に読み込む方法は?
f = open('my_file.txt', 'r+') my_file_data = f.read() f.close() 上記のコードは、読み取りモードで「my_file.txt」を開き、my_file.txtから読み取ったデータをmy_file_dataに保存して、ファイルを閉じます。読み取り機能は、ファイル全体を一度に読み取ります。以下を使用して、ファイルを1行ずつ読み取り、リストに保存できます。 f = open('my_file', 'r+') lines = [line for line inf.readline