CSDN 周赛 62 期
发布人:shili8
发布时间:2024-11-17 09:02
阅读次数:0
**CSDN 周赛62 期**
### 题目描述本周赛的题目是 "最长上升子序列",要求我们找出一个给定整数数组中,最长的连续上升子序列。
### 题目分析这个问题可以用动态规划来解决。我们需要维护一个长度为 n 的数组 dp,其中 dp[i] 表示以 i 为结尾的最长上升子序列的长度。
###代码实现
cpp#include <iostream>
using namespace std;
int longestIncreasingSubsequence(int arr[], int n) {
// 初始化动态规划数组 int dp[n];
for (int i =0; i < n; i++) {
dp[i] =1;
}
// 遍历数组,更新动态规划数组 for (int i =1; i < n; i++) {
for (int j =0; j < i; j++) {
if (arr[i] > arr[j]) {
dp[i] = max(dp[i], dp[j] +1);
}
}
}
// 找到最长上升子序列的长度 int maxLength =1;
for (int i =0; i < n; i++) {
if (dp[i] > maxLength) {
maxLength = dp[i];
}
}
return maxLength;
}
// 测试函数void test() {
int arr[] = {10,22,9,33,21,50,41,60};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "最长上升子序列的长度是:" << longestIncreasingSubsequence(arr, n);
}
int main() {
test();
return0;
}
###代码注释* `longestIncreasingSubsequence` 函数负责找出给定整数数组中,最长的连续上升子序列。
* `dp` 数组用于维护以每个元素为结尾的最长上升子序列的长度。
* 外层循环遍历整个数组,内层循环比较当前元素与前面的所有元素,如果当前元素大于某个元素,则更新 `dp` 数组。
* 最后,函数返回 `dp` 数组中最大值,即最长上升子序列的长度。
### 测试结果在测试函数中,我们定义了一个整数数组 `arr`,然后调用 `longestIncreasingSubsequence` 函数并输出结果。

