c++最长连续递增子序列(输出最长连续递增子序列长度和序列)
时间: 2024-12-20 15:20:13 浏览: 4
在C++中,我们可以使用动态规划的方式来求解最长连续递增子序列(LIS)。下面是一个简单的实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
void longestIncreasingSubsequence(int arr[], int n, vector<int>& lis) {
int dp[n];
dp[0] = 1;
// 初始化最长递增子序列长度
for (int i = 1; i < n; i++) {
dp[i] = 1;
// 检查所有小于当前元素且能构成递增子序列的元素
for (int j = 0; j < i; j++) {
if (arr[j] < arr[i] && dp[j] + 1 > dp[i]) {
dp[i] = dp[j] + 1;
}
}
}
// 找出最长递增子序列的长度
int max_len = *max_element(dp, dp + n);
// 构建最长递增子序列
vector<int> lis_seq;
for (int i = n - 1; dp[i] == max_len; i--) {
lis_seq.push_back(arr[i]);
}
reverse(lis_seq.begin(), lis_seq.end()); // 因为初始搜索是从左往右,所以需要反转
// 输出结果
cout << "最长连续递增子序列长度: " << max_len << endl;
for (int num : lis_seq) {
cout << num << " ";
}
cout << endl;
}
int main() {
int arr[] = {10, 9, 2, 5, 3, 7, 101, 18};
int n = sizeof(arr) / sizeof(arr[0]);
vector<int> result;
longestIncreasingSubsequence(arr, n, result);
return 0;
}
```
在这个代码中,我们首先初始化了一个dp数组来保存每个位置的最长递增子序列长度,然后遍历数组,更新dp值。最后,我们根据dp数组构建最长递增子序列并输出结果。
阅读全文