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

合計が少なくともPythonでターゲットとなる最小のサブリストのサイズを見つけるプログラム


numsと呼ばれる数値のリストと、targetと呼ばれる別の入力があるとすると、その合計値がtargetと同じかそれ以上になるように、最短のサブリストのサイズを見つける必要があります。そのようなサブリストがない場合は、-1を返します。

したがって、入力がnums =[2、11、-4、17、4] target =19の場合、[17、4]を選択して少なくとも19の合計を取得できるため、出力は2になります。

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

  • ps:=1つの要素のみを含むリスト0

  • numsのnumごとに、実行します

    • psの後に(ps + numの最後の要素)を挿入します

    • num> =targetの場合、

      • 1を返す

  • min_size:=inf

  • q:=[0]

  • j:=0

  • 1からpsのサイズの範囲のiの場合、実行します

    • j:=jの最小値、qのサイズ-1

      • j =ターゲット、実行

        • min_size:=min_sizeの最小値と(i --q [j])

        • j:=j + 1

      • qとps[i]<=ps [qの最後の要素]、実行

        • qから最後の要素を削除する

      • qの最後にiを挿入します

  • min_sizeの場合はmin_sizeを返します

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

class Solution:
   def solve(self, nums, target):
      ps = [0]
      for num in nums:
         ps += [ps[-1] + num]
         if num >= target:
            return 1
         min_size = float("inf")
         q = [0]
         j = 0
         for i in range(1, len(ps)):
            j = min(j, len(q) - 1)
            while j < len(q) and ps[i] - ps[q[j]] >= target:
               min_size = min(min_size, i - q[j])
               j += 1
            while q and ps[i] <= ps[q[-1]]:
               q.pop()
            q.append(i)
         return min_size if min_size < float("inf") else -1
ob = Solution()
nums = [2, 11, -4, 17, 4]
target = 19
print(ob.solve(nums, target))

入力

[2, 11, -4, 17, 4], 19

出力

2

  1. リストの累積合計を見つけるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが与えられたので、累積合計でリストを作成する必要があります。 次に、以下の実装のソリューションを見てみましょう- 例 # cumulative sum def Cumulative(l):    new = []    cumsum = 0    for element in l:       cumsum += element       new.append(cumsum) &

  2. 配列の合計を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列が与えられた場合、与えられた配列の合計を計算する必要があります。 ここでは、ブルートフォースアプローチに従うことができます。つまり、リストをトラバースし、各要素を空の合計変数に追加します。最後に、合計の値を表示します。 以下で説明するように、組み込みの合計関数を使用して別のアプローチを実行することもできます。 例 # main arr = [1,2,3,4,5] ans = sum(arr,n) print ('Sum of the array is '