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