最长上升连续子序列蛮力法Java完整代码包括主函数及运行实例
时间: 2024-10-20 14:04:26 浏览: 35
最长上升连续子序列(Longest Increasing Subsequence,LIS)是一种常见的动态规划问题。暴力搜索的方法虽然直观,但对于大规模数据效率较低。以下是使用Java实现暴力搜索(也称遍历所有可能子序列)的最长上升子序列算法的一个简单示例:
```java
public class Main {
public static void main(String[] args) {
int[] nums = {10, 9, 2, 5, 3, 7, 101, 18};
int length = longestIncreasingSubsequence(nums);
System.out.println("最长上升连续子序列的长度为:" + length);
}
// 蛮力法求解最长上升连续子序列
private static int longestIncreasingSubsequence(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
int[] dp = new int[nums.length]; // 初始化dp数组,存储每个位置的最大上升子序列长度
dp[0] = 1; // 第0个元素本身就是其上升子序列
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 Arrays.stream(dp).max().getAsInt();
}
}
```
在这个例子中,`longestIncreasingSubsequence`方法通过嵌套循环比较每个数字与其之前数字的关系,寻找最大的上升子序列。主函数`main`里提供了一个测试用例数组`nums`,并打印出最长上升连续子序列的长度。
阅读全文