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
-
Pythonの辞書で最長の単語
英語の辞書を表す単語のリストがあるとすると、与えられた単語リストの中で、単語内の他の単語によって一度に1文字ずつ作成できる最長の単語を見つける必要があります。考えられる答えが複数ある場合は、語彙の順序が最も小さい最長の単語を返します。答えがない場合は、空の文字列を返します。 したがって、入力が[h、 he、 hel、 hell、 hello]の場合、出力は helloになります。 これを解決するには、次の手順に従います- トライ:=新しい地図 関数insert()を定義します。これには言葉が必要です 今:=トライ 単語のcごとに、 cが今入っていない場合- now [c] ={#、Fa
-
Pythonでのトリプレットサブシーケンスの増加
ソートされていない配列があるとします。その配列に長さ3の増加するサブシーケンスが存在するかどうかを確認する必要があります。 正式には、関数は- i、j、kが存在する場合はtrueを返します 0≤i