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

Pythonで特定のリストの最長の算術サブシーケンスの長さを見つけるプログラム


numsと呼ばれる数値のリストがあるとすると、最長の算術サブシーケンスの長さを見つける必要があります。シーケンスS[i]は、S [i + 1] --S [i]が範囲内のすべてのiに対して同じ値を持つ場合の等差数列です(0≤i

したがって、入力がnums =[1、4、7、10、13、20、16]のような場合、出力は6になります。サブシーケンス[1、4、7、10、13、16]は算術演算です。連続する各要素の差が3であるためです。

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

  • n:=arrのサイズ
  • n <=1の場合、
    • return n
  • res:=0
  • dp:=空のマップ。デフォルトでは、キーが見つからない場合は1が格納されます
  • 1からn-1の範囲のiの場合、do
    • 0からi-1の範囲のjの場合、do
      • diff:=arr [i] --arr [j]
      • dp [i、diff]:=dp [j、diff] + 1
      • res:=resとdp[i、diff
      • の最大値
  • return res

例(Python)

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

from collections import defaultdict
class Solution:
   def solve(self, arr):
      n = len(arr)
      if n <= 1:
         return n
      res = 0
      dp = defaultdict(lambda: 1)
      for i in range(1, n):
         for j in range(i):
            diff = arr[i] - arr[j]
            dp[i, diff] = dp[j, diff] + 1
            res = max(res, dp[i, diff])
      return res
ob = Solution()
nums = [1, 4, 7, 10, 13, 20, 16]
print(ob.solve(nums))

入力

[1, 4, 7, 10, 13, 20, 16]

出力

6

  1. Pythonで最も長いバランスの取れたサブシーケンスの長さを見つけるプログラム

    括弧「(」および「)」を含む文字列sがあるとすると、バランスの取れた括弧の最長のサブシーケンスの長さを見つける必要があります。 したがって、入力がs =())(()(の場合、出力は4になります。これは、 ()()のようなサブシーケンスを取ることができるためです。 これを解決するには、次の手順に従います- res:=0 n:=sのサイズ close:=0 n-1から0の範囲のiの場合、1ずつ減らします。 s[i]が)と同じ場合、 close:=close + 1 それ以外の場合 0の場合、 close:=close-1 r

  2. Pythonで指定されたリストからk個の最長の単語を検索する

    さまざまな長さの多くの単語を含むリストから、上位n個の最長の単語を選択する必要があるシナリオがあります。この記事では、それを実現するためのさまざまなアプローチを紹介します。 count()およびsorted()を使用 まず、リストの要素を逆の順序で並べ替えて、リストの先頭で最も長い単語が使用できるようにします。次に、各単語の長さを見つけて、カウントの結果を変数に追加します。最後に、必要な最長の単語の数を切り取ります。 例 from itertools import count def longwords(l, x):    c = count()   &nb