给定一个无序的整数数组,找到其中最长上升子序列的长度。
示例:
输入:[10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是[2,3,7,101],它的长度是4说明:
- 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。
- 你算法的时间复杂度应该为 O(n2) 。
进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?
这个超级简答,用一个列表存储对应于输入数组的每个包含每个元素之前的最大值和长度。
例如输入为[10,9,2,5,3,7,101,18]的列表应为:[(10, 1), (9, 1), (2, 1), (5, 2), (3, 2), (7, 3), (101, 4), (18, 4)]
要确定每个索引对应的值,就得确定,该索引之前所有的小于该元素值中长度最长的那个元素。
class Solution(object):
def lengthOfLIS(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
dp = [(nums[0], 1)]
for ele in nums[1:]:
tmp_mx = 1
for items in dp:
if ele >= items[0]:
tmp_mx = max(items[1] + 1, tmp_mx)
dp.append((ele, tmp_mx))
return max([ele[1] for ele in dp])

本文介绍了一种寻找无序整数数组中最长上升子序列的方法,通过动态规划算法实现,给出了解决方案的具体步骤和示例,如输入[10,9,2,5,3,7,101,18],输出为4。
426

被折叠的 条评论
为什么被折叠?



