最长递增子序列java
时间: 2023-10-14 21:16:37 浏览: 75
以下是使用动态规划求解最长递增子序列的Java代码:
```java
public static int lengthOfLIS(int[] nums) {
if (nums == null || nums.length == 0) return 0;
int[] dp = new int[nums.length];
int maxLen = 1;
dp[0] = 1;
for (int i = 1; i < nums.length; i++) {
dp[i] = 1;
for (int j = 0; j < i; j++) {
if (nums[i] > nums[j]) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
maxLen = Math.max(maxLen, dp[i]);
}
return maxLen;
}
```
其中,dp[i] 表示以 nums[i] 结尾的最长递增子序列的长度,初始化为 1,因为每个数本身都是一个长度为 1 的递增子序列。接下来,我们从前往后遍历数组,对于每个位置 i,我们再从 0 到 i-1 遍历,找到所有比 nums[i] 小的数 j,如果存在 dp[j]+1 大于 dp[i],则更新 dp[i]。最后,我们遍历 dp 数组,找到最大值,即为所求的最长递增子序列的长度。
例如,对于数组 [10,9,2,5,3,7,101,18],我们可以得到以下 dp 数组:
```
[1,1,1,2,2,3,4,4]
```
最终的最长递增子序列长度为 4,对应的子序列为 [2,3,7,101] 或者 [2,5,7,101]。
阅读全文