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

Pythonを使用して、指定された合計条件を満たすサブシーケンスの数を見つけるプログラム


numsという配列と別の値kがあるとします。 numsの空でないサブシーケンスの数を見つけて、その最小要素と最大要素の合計がk以下になるようにする必要があります。回答は非常に大きい可能性があるため、回答mod 10 ^ 9+7を返します。

したがって、入力がnums =[4,6,7,8] k =11のような場合、

のようなサブシーケンスがあるため、出力は4になります。
  • [4]、ここでは最小値は4、最大値は4なので、4 + 4 <=11

  • [4,6]、ここでは最小値は4、最大値は6なので、4 + 6 <=11

  • [4,6,7]、ここでは最小は4、最大は7なので、4 + 7 <=11

  • [4,7]、ここでは最小は4、最大は7なので、4 + 7 <=11

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

  • リスト番号を並べ替える

  • m:=10 ^ 9 + 7

  • 左:=0

  • 右:=numsのサイズ-1

  • res:=0

  • 左<=右、実行

    • nums [left] + nums [right]> kの場合、

      • 右:=右-1

    • それ以外の場合

      • num_inside:=右-左

      • res:=(res +(2 ^ num_inside)mod m)mod m

      • 左:=左+ 1

  • 解像度を返す

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

def solve(nums, k):
   nums.sort()
   m = 10**9 + 7
   left = 0
   right = len(nums) - 1
   res = 0
   while(left <= right):
      if nums[left] + nums[right] > k:
         right -= 1
      else:
         num_inside = right - left
         res = (res + pow(2, num_inside, m)) % m
         left += 1
   return res
nums = [4,6,7,8]
k = 11
print(solve(nums, k))

入力

[4,6,7,8], 11

出力

4

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

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列の合計を計算するために必要な配列が与えられます。 合計を取得するために各インデックスで配列と要素全体をトラバースするブルートフォースアプローチについては、以下で説明します。合計を取得するための各インデックスについては、以下で説明します。 例 # sum function def sum_(arr,n):    # using built-in function    return(sum(arr)) # main arr = [11,22,33,44,55,66

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

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