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

C++如何在数组中找到最长可能的递减数字组合

要在C++中找到数组中最长可能的递减数字组合,可以使用动态规划的方法来解决。下面是一个可能的实现:

代码语言:txt
复制
#include <iostream>
#include <vector>

using namespace std;

vector<int> findLongestDecreasingSubsequence(vector<int>& nums) {
    int n = nums.size();
    vector<int> dp(n, 1); // dp[i]表示以nums[i]结尾的最长递减子序列的长度

    for (int i = 1; i < n; i++) {
        for (int j = 0; j < i; j++) {
            if (nums[j] > nums[i]) {
                dp[i] = max(dp[i], dp[j] + 1);
            }
        }
    }

    int maxLength = 0;
    int endIndex = 0;
    for (int i = 0; i < n; i++) {
        if (dp[i] > maxLength) {
            maxLength = dp[i];
            endIndex = i;
        }
    }

    vector<int> result;
    while (maxLength > 0) {
        result.insert(result.begin(), nums[endIndex]);
        maxLength--;
        endIndex--;
        while (endIndex >= 0 && dp[endIndex] != maxLength) {
            endIndex--;
        }
    }

    return result;
}

int main() {
    vector<int> nums = {5, 6, 3, 4, 8, 1, 2, 9};
    vector<int> longestDecreasingSubsequence = findLongestDecreasingSubsequence(nums);

    cout << "最长递减子序列为:";
    for (int num : longestDecreasingSubsequence) {
        cout << num << " ";
    }
    cout << endl;

    return 0;
}

上述代码中,我们使用了一个动态规划数组dp来记录以每个元素结尾的最长递减子序列的长度。然后,我们遍历数组,对于每个元素,再遍历其之前的元素,如果存在比当前元素小的元素,就更新dp数组中的值。最后,我们找到dp数组中的最大值,以及对应的索引,然后根据索引回溯找到最长递减子序列。

对于给定的示例数组{5, 6, 3, 4, 8, 1, 2, 9},最长递减子序列为{8, 2, 1}

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

相关·内容

领券