300. Longest Increasing Subsequence

给定一个未经排序的整数数组,寻找最长递增子序列的长度。

例如,

给定 [10, 9, 2, 5, 3, 7, 101, 18],

最长递增子序列是:[2, 3, 7, 101],因而长度是4。注意可能存在不止一个LIS组合,只需要返回长度即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution(object):
def lengthOfLIS(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
# 5 star, no idea
# 动态规划,dp[i]代表以i结尾的最长的LIS,状态转移方程 dp[i] = max(dp[i], dp[j]+1), j是0到i之间的范围
length = len(nums)
if not nums:
return 0
dp = [1] * length
for i in range(length):
for j in range(i):
if nums[i] > nums[j]:
dp[i] = max(dp[i], dp[j] + 1)
return max(dp)