程序在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
热门推荐
10 对患者生日祝福语简短
11 结婚祝福语简短装备
12 周岁祝福语学生文案简短
13 订婚领证祝福语简短精辟
14 导师获奖祝福语大全简短
15 新婚购房祝福语简短精辟
16 牛年祝福语简短的爱人
17 送芒果的祝福语简短
18 送给学长毕业祝福语简短