本文部分内容引用自:
https://blog.youkuaiyun.com/love20165104027/article/details/79618367
https://segmentfault.com/a/1190000012754802
如有侵权,请联系笔者删除,邮箱: hlxie_xidian@163.com
求最长递增子序列长度的方法有两种,第一种方法的时间复杂度为 O(n^2),第二种方法的时间复杂度为 O(nlogn)。
第一种方法代码实现如下:
public static void getTheLengthOfLIS(){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] array = new int[n];
for(int i = 0; i < n; i ++){
array[i] = scanner.nextInt();
}
int[] dp = new int[n];
dp[0] = 0;
for(int i = 1; i < n; i ++){
for(int j = i; j >= 0; j--){
if(array[j] < array[i]){
dp[i] = dp[j]+1;
break;
}
}
}
int max = dp[0];
for(int i = 1; i < n; i ++){
if(max < dp[i]){
max = dp[i];
}
}
System.out.println(max+1);
}
第二种方法思想部分引用自:https://blog.youkuaiyun.com/love20165104027/article/details/79618367
思想如下:
假设存在一个序列d[1…9] ={ 2,1 ,5 ,3 ,6,4, 8 ,9, 7},可以看出来它的LIS长度为5。
下面一步一步试着找