寻找 Python 中最长递增子序列长度的程序


假设我们有一系列数字。我们必须找到最长递增子序列的长度。因此,如果输入类似于[6, 1, 7, 2, 8, 3, 4, 5],则输出将为 5,因为最长的递增子序列是[2,3,4,5,6]。

为了解决这个问题,我们将遵循以下步骤:

  • 创建一个名为 tails 的数组,其大小与 nums 相同,并用 0 填充它。

  • size := 0

  • 对于 nums 数组中的每个元素 x:

    • i := 0, j := size

    • 当 i 与 j 不相同时,

      • mid := i + (j – i)/2

      • 如果 tails[mid] < x,则 i := mid + 1,否则 j := mid

    • tails[i] := x

    • size := i + 1 和 size 中的最大值

  • 返回 size。

让我们看看下面的实现以获得更好的理解:

示例

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

更新于: 10-10-2020

504 次查看

开启你的 职业

完成课程获得认证

开始
广告