程序在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 bisectclass 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