java求⼀个⼀维数组(N个元素)中的最长递增子序列的长度。 如:在序列1 ,4,2,5,3中,其最长的递增子序列为1 ,4,5或1,2,3,最长递增⼦序列的长度是3
时间: 2024-10-12 14:16:57 浏览: 30
在Java中,可以使用动态规划的方法来解决这个问题。这里是一个简单的算法步骤:
1. 创建一个长度为`N+1`的一维数组`dp`,其中`dp[i]`表示以第`i`个元素结尾的最长递增子序列的长度。
2. 初始化所有`dp`值为1,因为每个元素本身都是一个长度为1的递增子序列。
3. 遍历输入数组`arr`,从索引`i=1`开始到`N`:
- 对于每一个`arr[i]`,遍历它前面的所有元素`arr[j] (j < i)`,如果`arr[i] > arr[j]`,说明当前元素可以作为已知递增子序列的下一个元素来延长,更新`dp[i] = Math.max(dp[i], dp[j]+1)`。
4. 在遍历结束后,`dp[N]`就是整个数组中最长递增子序列的长度。
以下是对应的Java代码示例:
```java
public int lengthOfLIS(int[] nums) {
if (nums == null || nums.length == 0) return 0;
int[] dp = new int[nums.length];
Arrays.fill(dp, 1); // 初始化每个元素的长度为1
for (int i = 1; i < nums.length; i++) {
for (int j = 0; j < i; j++) {
if (nums[i] > nums[j]) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
}
return dp[nums.length - 1]; // 返回最长递增子序列的长度
}
```
阅读全文