在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