Pythonで最長増加部分列の長さを見つけるプログラム
番号のリストがあるとします。最も長く増加するサブシーケンスの長さを見つける必要があります。したがって、入力が[6、1、7、2、8、3、4、5]の場合、最長増加部分列は[2,3,4,5,6]であるため、出力は5になります。
これを解決するには、次の手順に従います-
-
サイズがnumsと同じであるtailsという配列を作成し、これを0で埋めます。
-
サイズ:=0
-
nums配列の各要素xについて-
-
i:=0、j:=サイズ
-
iはjと同じではありませんが、
-
mid:=i +(j – i)/ 2
-
tails [mid]
-
-
tails [i]:=x
-
サイズ:=最大ofi+1およびサイズ
-
-
返品サイズ。
理解を深めるために、次の実装を見てみましょう-
例
class Solution(object): def solve(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) return size ob = Solution() nums = [7, 2, 8, 3, 9, 4, 5, 6] print(ob.solve(nums))
入力
[7, 2, 8, 3, 9, 4, 5, 6]
出力
5
-
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
-
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]