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

Pythonで合計が等しいk個のサブ配列に分割できるかどうかを確認します


numsという数値の配列があり、別の値Kもあるとします。各サブ配列の要素の合計が等しくなるように、配列numsをK個の連続するサブ配列に分割できるかどうかを確認する必要があります。

したがって、入力がnums =[2、5、3、4、7] k =3のような場合、[(2、5)、(3、4)、 (7)]すべてが等しい合計7を持ちます。

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

  • n:=numsのサイズ
  • cumul_sum:=nums単位のすべての要素の累積合計
  • total_sum:=cumul_sum [n-1]
  • total_sumがkで割り切れない場合、
    • Falseを返す
  • count:=0、pos:=-1
  • 0からn-1の範囲のiの場合、do
    • posが-1と同じ場合、
      • sub:=0
    • それ以外の場合、
      • sub:=cumul_sum [pos]
    • cumul_sum [i] --subが(total_sum / K)と同じ場合、
      • pos:=i
      • count:=count + 1
    • それ以外の場合、cumul_sum [i]-cumul_sum [pos]>(total_sum / K)の場合、
      • ループから抜け出す
  • カウントがKと同じ場合はtrueを返し、それ以外の場合はfalseを返します

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

def solve(nums, k):
   n = len(nums)
   cumul_sum = [0 for i in range(n)]
   cumul_sum[0] = nums[0]
   for i in range(1, n):
      cumul_sum[i] = cumul_sum[i - 1] + nums[i]
   total_sum = cumul_sum[n - 1]
   if total_sum % k != 0:
      return False
   count = 0
   pos = -1
   for i in range(n):
      if pos == -1:
         sub = 0
      else:
         sub = cumul_sum[pos]
      if cumul_sum[i] - sub == total_sum / k:
         pos = i
         count += 1
      elif cumul_sum[i] - cumul_sum[pos] > total_sum / k:
         break
   return count == k
nums = [2, 5, 3, 4, 7]
k = 3
print(solve(nums, k))

入力

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

出力

True

  1. 与えられた合計のトリプレットがPythonのBSTに存在するかどうかを確認します

    整数値と数値「合計」を含む二分探索木(BST)が提供されているとします。提供されたBSTに、3つの要素の加算が提供された「合計」値に等しい、3つの要素のグループがあるかどうかを確認する必要があります。 したがって、入力が次のような場合 total =12の場合、出力はTrueになります。 これを解決するには、次の手順に従います- temp_list:=ゼロで初期化された新しいリスト ツリーを順番にトラバースしてtemp_listに配置します 0から(temp_listのサイズ-2)の範囲のiの場合、1ずつ増やします。 左:=i + 1 right:=temp_listのサ

  2. Pythonで合計が等しい3つの部分に配列を分割する

    整数の配列Aがあるとすると、合計が等しい3つの空でない部分に配列を分割できる場合にのみ、出力はtrueになります。 正式には、(A [0] + A [1] + ... +A[i]がA[i+ 1] + A[と同じであるインデックスi+1