最长上升子序列java
时间: 2023-11-20 07:55:42 浏览: 100
最长上升子序列
以下是Java实现最长上升子序列的代码:
```java
public class Solution {
public int lengthOfLIS(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
int[] dp = new int[nums.length];
int res = 0;
for (int i = 0; i < nums.length; i++) {
dp[i] = 1;
for (int j = 0; j < i; j++) {
if (nums[j] < nums[i]) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
res = Math.max(res, dp[i]);
}
return res;
}
}
```
解释:
- 首先判断数组是否为空或长度为0,如果是则返回0。
- 定义一个长度为nums.length的数组dp,dp[i]表示以nums[i]为结尾的最长上升子序列的长度。
- 初始化dp数组为1,因为每个数字本身都可以看作一个长度为1的上升子序列。
- 从0到i遍历数组nums,对于每个i,再从0到i-1遍历数组nums,如果nums[j] < nums[i],则说明nums[i]可以接在nums[j]后面形成一个更长的上升子序列,此时更新dp[i]的值为dp[j]+1和dp[i]中的较大值。
- 在遍历过程中,记录dp数组中的最大值,即为最长上升子序列的长度。
- 返回最长上升子序列的长度。
阅读全文