题目描述:
Given an unsorted array of integers, find the length of longest increasing subsequence.
For example,
Given [10, 9, 2, 5, 3, 7, 101, 18]
,
The longest increasing subsequence is [2, 3, 7, 101]
, therefore the length is 4
. Note that there may be more than one LIS combination, it is only necessary for you to return the length.
Your algorithm should run in O(n^2) complexity.
Follow up: Could you improve it to O(n log n) time complexity?
第一种方法:O(n^2)的思路,动态规划
若想知道长度为n的数组的最长递增子序列,若已经知道长度为n-1的数组的最长递增子序列,再把最后一个元素加进去,问题就可以解决,依次往前推,我们从前往后记录以每一个元素结尾的数组的最长递增子序列的长度,一直到求出以最后一个元素结尾的最长递增子序列的长度,就可以知道该数组的最长递增子序列的长度。
class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
res = [1] * len(nums) #设初始值
for i in range(len(nums)):
for j in range(i):
if nums[i] > nums[j]:
res[i] = max(res[i], res[j]+1)
return max(res) if res else 0