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
本文介绍了一种求解最长递增子序列长度的算法,给出了一段Java代码实现,并指出算法的时间复杂度为O(n^2)。该问题旨在找出数组中最长递增子序列的长度。

被折叠的 条评论
为什么被折叠?



