程序在python中找到最长的循环递增子序列的长度

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

因此,如果输入类似于nums = [6、5、8、2、3、4],则输出将为5,因为最长的递增子序列为[2、3、4、6、8]。

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

  • a:=生成一个大小为nums的大小的列表,并两次填充nums

  • 回答:= 0

  • 对于范围从0到nums的i,执行

    • n:= a [j]

    • k:=最左边的索引以将n插入dp

    • 如果k与dp的大小相同,则

    • 除此以外,

    • ans:= ans的最大值和dp的大小

    • 在dp的末尾插入n

    • dp [k]:= n

    • dp:=一个新列表

    • 对于范围i到数量num + i-1的j

    • 返回ans

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

    例 

    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中找到最长的循环递增子序列的长度 的全部内容, 来源链接: utcz.com/z/340772.html

    回到顶部