Problem Statement
(Source) 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(n2) complexity.
Follow up: Could you improve it to O(nlogn) time complexity?
Solution 1
class Solution(object):
def lengthOfLIS(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if not nums:
return 0
# dp:
ans = 1
dp = [1 for i in range(len(nums))]
for i in range(1, len(nums)):
for j in range(i):
if nums[j] < nums[i]: # euqal?
dp[i] = max(dp[i], dp[j] + 1)
ans = max(ans, dp[i])
return ans
Complexity analysis
- Time complexity:
O(n2)
, where
n
is the size of input array.
- Space complexity:
Solution 2
[TODO!]