描述
给定一个长度为 n 的数组 arr,求它的最长严格上升子序列的长度。
所谓子序列,指一个数组删掉一些数(也可以不删)之后,形成的新数组。例如 [1,5,3,7,3] 数组,其子序列有:[1,3,3]、[7] 等。但 [1,6]、[1,3,5] 则不是它的子序列。
import java.util.Arrays;
public class LISSolve {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 给定数组的最长严格上升子序列的长度。
* @param arr int整型一维数组 给定的数组
* @return int整型
*/
public int LIS (int[] arr) {
if(arr == null || arr.length == 0){
return 0;
}
int maxLen = 1;
int[] dp = new int[arr.length];
// 1 1 1 2 2 3 4
// 1 0 0 1 1 2 3
Arrays.fill(dp,1);
dp[0] = 1;
for (int i = 1; i < arr.length; i++) {
for (int j = 0; j < i; j++) {
if(arr[j] < arr[i]){
dp[i] = Math.max(dp[i], dp[j]+1);
}
}
maxLen = Math.max(maxLen,dp[i]);
}
// for (int i = 0; i < dp.length; i++) {
// System.out.print(String.valueOf(dp[i])+" ");
// }
return maxLen;
}
public static void main(String[] args) {
//int[] arr = {6,3,1,5,2,3,7};
int[] arr = {1,6,4,7,5,3,2};
LISSolve lisSolve = new LISSolve();
int res = lisSolve.LIS(arr);
System.out.println();
System.out.println(res);
System.out.println("main...");
}
}