Python 中的最长递增子序列

pythonserver side programmingprogramming更新于 2025/11/23 1:16:17

假设我们有一个未排序的整数列表。我们必须找到最长的递增子序列。因此,如果输入是 [10,9,2,5,3,7,101,18],则输出将为 4,因为递增子序列是 [2,3,7,101]

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

  • trail := 长度为 0 到 nums 长度的数组 – 1,并用 0 填充
  • size := 0
  • for x in nums
    • i := 0, j := size
    • while i is not j
      • mid := i + (j - i) / 2
      • 如果 trails[mid] < x,则 i := mid + 1,否则 j := mid
    • trails[i] := x
    • size := i + 1 和 size 中的最大值
  • 返回 size

让我们看看下面的实现以便更好地理解 −

示例

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

相关文章


有用资源