==========================努力奋斗财源广进==========================
给定一个长度为 n 的数组 arr,求它的最长严格上升子序列的长度。 所谓子序列,指一个数组删掉一些数(也可以不删)之后,形成的新数组。例如 [1,5,3,7,3] 数组,其子序列有:[1,3,3]、[7] 等。但 [1,6]、[1,3,5] 则不是它的子序列。
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 给定数组的最长严格上升子序列的长度。
* @param arr int整型一维数组 给定的数组
* @return int整型
*/
public int LIS (int[] arr) {
int n = arr.length;
//特殊请款判断
if (n == 0) return 0;
//dp[i]表示以下标i结尾的最长上升子序列长度
int[] dp = new int[n];
for (int i = 0; i < n; i++) {
//初始化为1
dp[i] = 1;
for (int j = 0; j < i; j++) {
if (arr[i] > arr[j]) {
//只要前面某个数小于当前数,则要么长度在之前基础上加1,要么保持不变,取较大者
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
}
//返回所有可能中的最大值
return Arrays.stream(dp).max().getAsInt();
}
}
//待定
评论区记录复习记录
评论