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

Pythonで最長増加部分列


ソートされていない整数のリストがあるとします。最も長く増加するサブシーケンスを見つける必要があります。したがって、入力が[10,9,2,5,3,7,101,18]の場合、増加するサブシーケンスは[2,3,7,101]

であるため、出力は4になります。

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

  • trail:=長さ0からnums – 1の長さの配列で、これを0で埋めます
  • サイズ:=0
  • numsのxの場合
    • i:=0、j:=サイズ
    • 私はjではありません
      • mid:=i +(j --i)/ 2
      • trails [mid]
    • トレイル[i]:=x
    • サイズ:=最大i+1およびサイズ
  • 返品サイズ

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

class Solution(object):
   def lengthOfLIS(self, nums):
      tails =[0 for i in range(len(nums))]
      size = 0
      for x in nums:
         i=0
         j=size
         while i!=j:
            mid = i + (j-i)//2
            if tails[mid]< x:
               i= mid+1
            else:
               j = mid
               tails[i] = x
               size = max(i+1,size)
               #print(tails)
      return size
ob1 = Solution()
print(ob1.lengthOfLIS([10,9,2,5,3,7,101,18]))

入力

[10,9,2,5,3,7,101,18]

出力

4

  1. Pythonの辞書で最長の単語

    英語の辞書を表す単語のリストがあるとすると、与えられた単語リストの中で、単語内の他の単語によって一度に1文字ずつ作成できる最長の単語を見つける必要があります。考えられる答えが複数ある場合は、語彙の順序が最も小さい最長の単語を返します。答えがない場合は、空の文字列を返します。 したがって、入力が[h、 he、 hel、 hell、 hello]の場合、出力は helloになります。 これを解決するには、次の手順に従います- トライ:=新しい地図 関数insert()を定義します。これには言葉が必要です 今:=トライ 単語のcごとに、 cが今入っていない場合- now [c] ={#、Fa

  2. Pythonでのトリプレットサブシーケンスの増加

    ソートされていない配列があるとします。その配列に長さ3の増加するサブシーケンスが存在するかどうかを確認する必要があります。 正式には、関数は- i、j、kが存在する場合はtrueを返します 0≤i