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

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

  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で最長増加部分列

    ソートされていない整数のリストがあるとします。最も長く増加するサブシーケンスを見つける必要があります。したがって、入力が[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]