使用java给定一个无序整数数组 找到其中最长的递增子序列的长度。比如输入,10 9 2 5 3 7 101 18输出4
时间: 2024-10-19 12:17:49 浏览: 23
最长递增子序列(LIS)问题是一个经典的动态规划问题 给定一个数组,我们要找到其中最长的严格递增子序列的长度
在Java中,可以使用动态规划(Dynamic Programming)来解决这个问题,具体算法叫做“Kadane's Algorithm”或“最长递增子序列”。这个算法的核心思想是维护两个变量:当前最长递增子序列的长度`length`,以及从当前位置开始的最大递增子序列的长度`maxLength`。
以下是Java代码实现:
```java
public class Solution {
public int lengthOfLIS(int[] nums) {
if (nums == null || nums.length == 0) return 0;
int[] dp = new int[nums.length]; // 初始化一个长度等于数组长度的一维数组
dp[0] = nums[0]; // 第一个元素本身就是最长递增子序列
for (int i = 1; i < nums.length; i++) { // 遍历数组
dp[i] = 1; // 每个元素初始长度为1
for (int j = 0; j < i; j++) { // 查找以当前元素为结尾的最长递增子序列
if (nums[j] < nums[i]) && dp[j] + 1 > dp[i]) {
dp[i] = dp[j] + 1; // 更新最长递增子序列长度
}
}
}
return Arrays.stream(dp).max().getAsInt(); // 返回最大值作为结果
}
}
```
对于给定的例子,如输入数组 `[10, 9, 2, 5, 3, 7, 101, 18]`,该函数会返回最长递增子序列的长度,即 `4`。
阅读全文