在Python中查找最长环形递增子序列的长度

在Python中查找最长环形递增子序列的长度

假设我们有一个名为nums的数字列表,我们需要找到最长递增子序列的长度,并且假设子序列可以环绕到列表的开头。

因此,如果输入是nums = [6, 5, 8, 2, 3, 4],那么输出将是5,因为最长递增子序列是[2, 3, 4, 6, 8]。

为了解决这个问题,我们会按照以下步骤进行 –

  • a:创建一个大小为nums的两倍的列表,并将nums填充两次。
  • ans:0
  • 对于0到nums大小的范围内的i进行以下操作:
    • dp:一个新的列表
    • 对于范围在i到nums大小+i-1之间的j进行以下操作:
      • n:a[j]
      • k:将n插入dp的最左侧索引
      • 如果k与dp大小相同,则
      • 在dp末尾插入n
      • 否则,
      • dp[k]:= n
      • ans:ans和dp大小的最大值。
  • 返回ans

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

更多Python相关文章,请阅读:Python 教程

示例

import bisect
class Solution:
   def solve(self, nums):
      a = nums + nums
      ans = 0
      for i in range(len(nums)):
        dp = []
        for j in range(i, len(nums) + i):
           n = a[j]
           k = bisect.bisect_left(dp, n)
           if k == len(dp):
              dp.append(n)
           else:
              dp[k] = n
        ans = max(ans, len(dp))
      return ans

ob = Solution()
nums = [4, 5, 8, 2, 3, 4]
print(ob.solve(nums))

输入

[4, 5, 8, 2, 3, 4]

输出

5

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程