import java.util.*;
public class Solution {
/**
* 计算数组的最长递增子序列(Longest Increasing Subsequence, LIS)的长度
*
* @param arr 输入数组
* @return 返回最长递增子序列的长度
*/
public int LIS(int[] arr) {
// 检查数组是否为空或长度为0
if (arr == null || arr.length == 0) {
return 0;
}
// 创建dp数组,dp[i]表示以arr[i]结尾的最长递增子序列的长度
int[] dp = new int[arr.length];
// 初始化dp数组,每个位置的初始值为1,因为每个元素本身就是一个长度为1的子序列
Arrays.fill(dp, 1);
// 用于记录最终结果
int ans = 1;
// 遍历数组,从第二个元素开始
for (int i = 1; i < arr.length; i++) {
// 对于每个元素,遍历它之前的所有元素
for (int j = 0; j < i; j++) {
// 如果当前元素arr[i]大于之前的某个元素arr[j]
if (arr[i] > arr[j]) {
// 更新dp[i]的值,取当前dp[i]和dp[j]+1中的较大值
dp[i] = Math.max(dp[j] + 1, dp[i]);
}
}
// 更新最终结果,取当前最大值和dp[i]中的较大值
ans = Math.max(ans, dp[i]);
}
// 返回最长递增子序列的长度
return ans;
}
}