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 is4
. 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.
注意:该问题求的是递增子序列而不是递增子串
Java代码如下所示:
public class Solution {
public int lengthOfLIS(int[] nums) {
if(nums == null || nums.length == 0) {
return 0;
}
int max = 1;
int[] dp = new int[nums.length];
dp[0] = 1;
for(int i = 1; i < dp.length; i++) {
int preMax = 0;
for(int j = 0; j < i; j++) {
if(nums[j] < nums[i] && preMax < dp[j]) {
preMax = dp[j];
}
}
dp[i] = preMax + 1;
if(max < dp[i]) {
max = dp[i];
}
}
return max;
}
public static void main(String[] args) {
Solution solution = new Solution();
int[] nums = {10, 9, 2, 5, 3, 7, 101, 18};
System.out.println(solution.lengthOfLIS(nums));
}
}empty