文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么使用C++动态规划计算最大子数组

2023-07-02 14:18

关注

本文小编为大家详细介绍“怎么使用C++动态规划计算最大子数组”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用C++动态规划计算最大子数组”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

例题

题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。

例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。

1.求最大的子数组的和

代码【C++】

#include <iostream>using namespace std;/// Find the greatest sum of all sub-arrays// Return value: if the input is valid, return true, otherwise return false/bool FindGreatestSumOfSubArray    (    int *pData,           // an array    unsigned int nLength, // the length of array    int &nGreatestSum     // the greatest sum of all sub-arrays    ){    // if the input is invalid, return false    if((pData == NULL) || (nLength == 0))        return false;    int nCurSum = nGreatestSum = 0;    for(unsigned int i = 0; i < nLength; ++i)    {        nCurSum += pData[i];        // if the current sum is negative, discard it        if(nCurSum < 0)            nCurSum = 0;        // if a greater sum is found, update the greatest sum        if(nCurSum > nGreatestSum)            nGreatestSum = nCurSum;    }    // if all data are negative, find the greatest element in the array    if(nGreatestSum == 0)    {        nGreatestSum = pData[0];        for(unsigned int i = 1; i < nLength; ++i)        {            if(pData[i] > nGreatestSum)                nGreatestSum = pData[i];        }    }    return true;}int main(){    int arr[] = {1, -2, 3, 10, -4, 7, 2, -5};    int iGreatestSum;    FindGreatestSumOfSubArray(arr, sizeof(arr)/sizeof(int), iGreatestSum);    cout << iGreatestSum << endl;    return 0;}

结果

怎么使用C++动态规划计算最大子数组

2.求和最大的相应子数组

代码【C++】

#include <iostream>using namespace std;/// Find the greatest sum of all sub-arrays// Return value: if the input is valid, return true, otherwise return false/bool FindGreatestSumOfSubArray    (    int *pData,           // an array    unsigned int nLength, // the length of array    int &nGreatestSum,    // the greatest sum of all sub-arrays    int &start,                            // Added    int &end                            // Added    ){    // if the input is invalid, return false    if((pData == NULL) || (nLength == 0))        return false;    int nCurSum = nGreatestSum = 0;    int curStart = 0, curEnd = 0;        // Added    start = end = 0;                    // Added    for(unsigned int i = 0; i < nLength; ++i)    {        nCurSum += pData[i];        curEnd = i;                        // Added        // if the current sum is negative, discard it        if(nCurSum < 0)        {            nCurSum = 0;            curStart = curEnd = i + 1;    // Added        }        // if a greater sum is found, update the greatest sum        if(nCurSum > nGreatestSum)        {            nGreatestSum = nCurSum;            start = curStart;            // Added            end = curEnd;                // Added        }    }    // if all data are negative, find the greatest element in the array    if(nGreatestSum == 0)    {        nGreatestSum = pData[0];        start = end = 0;                // Added        for(unsigned int i = 1; i < nLength; ++i)        {            if(pData[i] > nGreatestSum)            {                nGreatestSum = pData[i];                start = end = i;        // Added            }        }    }    return true;}int main(){    int arr[] = {1, -2, 3, 10, -4, 7, 2, -5};    int iGreatestSum, start, end;    FindGreatestSumOfSubArray(arr, sizeof(arr)/sizeof(int), iGreatestSum,         start, end);    cout << iGreatestSum << ": ";    for(int i = start; i <= end; i++)    {        cout << arr[i] << " ";    }    return 0;}

结果

怎么使用C++动态规划计算最大子数组

读到这里,这篇“怎么使用C++动态规划计算最大子数组”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯