首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

求最长递增子序列C++的长度

最长递增子序列是指在一个序列中,找到最长的一个子序列,使得子序列中的元素按照顺序递增。以C++语言为例,可以使用动态规划算法来解决这个问题。

动态规划算法的思路是,定义一个数组dp,dp[i]表示以第i个元素结尾的最长递增子序列的长度。初始化dp数组的所有元素为1,因为每个元素本身都可以作为一个长度为1的递增子序列。

然后,从第2个元素开始遍历原始序列,对于第i个元素,再从第1个元素到第i-1个元素依次判断,如果第j个元素小于第i个元素,并且dp[j]+1大于dp[i],则更新dp[i]为dp[j]+1。这样遍历完整个序列后,dp数组中的最大值即为最长递增子序列的长度。

以下是示例的C++代码:

代码语言:txt
复制
#include <iostream>
#include <vector>
using namespace std;

int findLengthOfLIS(vector<int>& nums) {
    int n = nums.size();
    vector<int> dp(n, 1);
    int maxLength = 1;
    for (int i = 1; i < n; i++) {
        for (int j = 0; j < i; j++) {
            if (nums[i] > nums[j] && dp[j] + 1 > dp[i]) {
                dp[i] = dp[j] + 1;
            }
        }
        maxLength = max(maxLength, dp[i]);
    }
    return maxLength;
}

int main() {
    vector<int> nums = {10, 9, 2, 5, 3, 7, 101, 18};
    int length = findLengthOfLIS(nums);
    cout << "最长递增子序列的长度为:" << length << endl;
    return 0;
}

该算法的时间复杂度为O(n^2),其中n为序列的长度。对于较大的序列,可能会导致算法运行时间较长。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券