题目
https://leetcode.com/problems/longest-increasing-subsequence/
Given an unsorted array of integers, find the length of longest increasing subsequence.
//求无序数组的最长递增序列长度。
Example:
Input: [10,9,2,5,3,7,101,18]
Output: 4
Explanation: The longest increasing subsequence is [2,3,7,101], therefore the length is 4.
Note:
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(n log n) time complexity?
Solution
最直观的递归解法,时间复杂度为O(n2).
class Solution {
public int lengthOfLIS(int[] nums) {
int n = nums.length;
if(n <= 1) return n;
int lis = 0;
int tmp = 0;
int dp[] = new int[n];
dp[0] = 1;
for(int i=1; i<n; i++){
for(int j=0; j<i; j++){
tmp = 1;
if(nums[j] < nums[i]) tmp = dp[j] + 1;
dp[i] = dp[i] < tmp ? tmp : dp[i];
}
lis = lis < dp[i] ? dp[i]: lis;
}
return lis;
}
}