当前位置:实例文章 » 其他实例» [文章]CSDN 周赛 62 期

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` 函数并输出结果。

相关标签:
其他信息

其他资源

Top