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

合計がPythonで与えられる2つの重複しないサブリストの長さの合計を見つけるプログラム


numsと呼ばれる数値のリストと別の値kがあるとすると、合計がkであるnums内の2つの重複しないサブリストを検索し、それらの長さの合計を検索する必要があります。可能なサブリストが3つ以上ある場合は、2つの最小のサブリストの長さの合計を見つける必要があります。答えが見つからない場合は、-1を返します。

したがって、入力がnums =[7、10、-2、-1、4、3] k =7の場合、[7]や[4、3]のようなサブリストを選択すると、出力は3になります。 。 [10、-2、-1]は長いので、選択しませんでした。

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

  • N:=Aのサイズ

  • サイズNのプレフィックス:=、無限大で埋める

  • last:=キー0の値が-1のマップ{0:-1}

  • s:=0

  • 0からNの範囲のiの場合、実行

    • s:=s + A [i]

    • prefix [i]:=i − last [s − target]、見つからない場合はset −infinity

    • last [s]:=i

  • 1からNの範囲のiの場合、実行します

    • prefix [i]:=最小のprefix [i]、prefix [i − 1]

  • サイズNの接尾辞:=、無限大で埋める

  • last:=キー0の値がNのマップ{0:N}

  • s:=0

  • N − 1〜-1の範囲のiの場合、1ずつ減少します。

    • s:=s + A [i]

    • 接尾辞[i]:=last [s − target](見つからない場合は無限集合を設定)− i

    • last [s]:=i

  • N − 2〜-1の範囲のiの場合、1ずつ減少します。

    • 接尾辞[i]:=最小の接尾辞[i]と接尾辞[i + 1]

  • ans:=0からN−1の範囲の各iのプレフィックス[i]+サフィックス[i+1]の最小値

  • ans<無限大の場合はansを返します。それ以外の場合は-1

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

class Solution:
   def solve(self, A, target):
      INF = float("inf")
      N = len(A)
      prefix = [INF] * N
      last = {0: −1}
      s = 0
      for i in range(N):
         s += A[i]
         prefix[i] = i − last.get(s − target, −INF)
         last[s] = i
      for i in range(1, N):
         prefix[i] = min(prefix[i], prefix[i − 1])
      suffix = [INF] * N
      last = {0: N}
      s = 0
      for i in range(N − 1, −1, −1):
         s += A[i]
         suffix[i] = last.get(s − target, INF) − i
         last[s] = i
      for i in range(N − 2, −1, −1):
         suffix[i] = min(suffix[i], suffix[i + 1])
      ans = min(prefix[i] + suffix[i + 1] for i in range(N − 1))
      return ans if ans < INF else −1
ob = Solution()
nums = [7, 10, −2, −1, 4, 3]
k = 7
print(ob.solve(nums, k))

入力

[7, 10, −2, −1, 4, 3], 7

出力

3

  1. いいえが2の累乗であるかどうかを調べるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 数nが与えられた場合、与えられた数が2の累乗であるかどうかを確認する必要があります。 アプローチ 入力数を2で割り続けます。つまり、=n/2を繰り返します。 各反復で、n%2がゼロ以外になり、nが1でない場合、nは2の累乗ではないことを確認します。 nが1になると、2の累乗になります。 以下の実装を見てみましょう- 例 def isPowerOfTwo(n):    if (n == 0):       retur

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

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