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

Pythonでサイズkの増加するサブシーケンスの数を見つけるプログラム


numsと呼ばれる数のリストと別の値kがあるとすると、厳密に増加しているサイズkのサブシーケンスの数を見つける必要があります。答えが非常に大きい場合は、10 ^ 9+7で変更します。

したがって、入力がnums =[2、3、4、1] k =2のような場合、サイズ2のサブシーケンスがあるため、出力は3になります。[2、3]、[3、4]、 [2、4]。

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

  • m:=10 ^ 9 + 7
  • dp:=numsと同じサイズのリストで、1を入力します
  • 次のk回繰り返します。
    • dp-1から0の範囲サイズのjの場合、1ずつ減らします。
      • dp [j]:=0
      • 0からjの範囲のiについては、
        • nums [i]
        • dp [j]:=dp [j] + dp [i]
  • return(dp内のすべての要素の合計)mod m
  • 例(Python)

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

    class Solution:
       def solve(self, nums, k):
          m = 10 ** 9 + 7
          dp = [1] * len(nums)
          for _ in range(k - 1):
             for j in range(len(dp) - 1, -1, -1):
                dp[j] = 0
                for i in range(j):
                   if nums[i] < nums[j]:
                      dp[j] += dp[i]
          return sum(dp) % m
    ob = Solution()
    nums = [2, 3, 4, 1]
    k = 2
    print(ob.solve(nums, k))

    入力

    [2, 3, 4, 1], 2

    出力

    3

    1. Pythonで範囲内のノード数を見つけるプログラム

      BSTがあり、左と右の境界lとrもあるとすると、lとrの間に値が存在するルート内のすべてのノードの数を見つける必要があります。 したがって、入力が次のような場合 l =7、r =13の場合、8、10、12の3つのノードがあるため、出力は3になります。 これを解決するために、次の手順に従います- スタック:=スタックと最初にルートを挿入し、カウント:=0 スタックが空でないときに、実行します node:=スタックの最上位要素、およびポップ要素 ノードがnullでない場合、 l<=ノードのデータ<=rの場合、 count:=count + 1

    2. リスト内で最大数を見つけるPythonプログラム

      この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 与えられたリスト入力では、与えられたリストの中で最大の数を見つける必要があります。 ここでは、2つのアプローチについて説明します 並べ替え手法の使用 組み込みのmax()関数を使用する アプローチ1-組み込みのsort()関数を使用する 例 list1 = [18, 65, 78, 89, 90] list1.sort() # main print("Largest element is:", list1[-1]) 出力 Largest element is: