本文已参与「新人创作礼」活动,一起开启掘金创作之路
题目描述
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。
子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
输入:nums = [10,9,2,5,3,7,101,18] 输出:4 解释:最长递增子序列是 [2,3,7,101],因此长度为 4
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/lo… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路分析
首先每个数字的长度为1 那么先建立一个状态列表 以 【10,9,2,5,3,7,101,18】为例, 那么它一开始的状态列表为【1 】* len(nums) 然后开始找规律 【10】 状态列表:【1】 即,10对应长度1的上升序列
【10,9】 状态列表:【1,1】
【10,9,2】 状态列表:【1,1,1】
【10,9,2,5】 状态列表:【1,1,1,2】
【10,9,2,5,3】 状态列表:【1,1,1,2,2】
然后我们找到的规律如下: 以5为例,它比10,9都要小,所以它的上升子序长度为1,但5又比2要大,所以它的上升子序长度为2(2对应的最长子序列状态加1)
然后我们将这个规律写成代码
代码实现
nums1 = input().split()
length = len(nums1)
nums = []
for i in range(length):
x = int(nums1[i])
nums.append(x)
l = len(nums)
result = [1] * l
for i in range(l):
for j in range(i):
if nums[i] > nums[j]:
result[i] = max(result[i], result[j] + 1)
print(max(result))