• 返回一个整数数组中最大子数组的和


    要求:

         结对开发

         1.输入一个整数数组,数组里有正数也有负数

         2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和

         3.求所有子数组的和的最大值。要求时间复杂度为O(n)

    思路:

        看到题目后与队友商量,打算挨个求出每个子数组的和,再进行比较,可是计算特别麻烦。老师让同学上去讲他的思路发现用动态规划这样的思路写出来特别简单,下课后和队友讨论了用动态规划求数组和的思路

        用三个数组number[]用来存用户输入的数组元素;Arr[j][0]指前j个元素中,不包含Arr[j]的子数组中和最大的值;Arr[j][1]指前j个元素中,包含Arr[j]的子数组中和最大的值,从第一个元素开始循环到求出最后一对Arr[j][0]和Arr[j][1],再比较其大小,利用max()函数求两个中最大值,输出最大的子数组之和

    //求最大子数组和 队员:张鹏宇 武于微
    #include<iostream>
    #include<cmath>
    using namespace std;
    
    int main()
    {
        int number[200],k=0,j=1,Arr[200][2],Max;
        cout<<"请输入整数数组元素:"<<endl;
        for(;;k++)
        {
            cin>>number[k];
            if(cin.get()=='
    ')
            {
                break;
            }
        }
        Arr[0][1]=number[0];
        for(;j<k+1;j++)
        {
            Arr[j][0]=max(Arr[j-1][0],Arr[j-1][1]);
            Arr[j][1]=max(Arr[j-1][1]+number[j],number[j]);
            Max=max(Arr[j][0],Arr[j][1]);
        }
        cout<<"该整数数组最大的子数组和为:"<<Max<<endl;
        return 0;
    }

    运行结果截图:

    体会:

         这次编程用到了动态规划的思路,使得问题大大简化,如果没有同学讲到这个方法可能自己不会想到会费好大的劲去写很长代码,认识到自己还有很多的不足,阅读书籍和代码量太少,还需再努力。

    结对的小伙伴博客:http://www.cnblogs.com/fooreveryu/

  • 相关阅读:
    当当网首页——JS代码
    当当网首页——CSS代码
    离散与连续 分度值
    timepicker php strtotime 8hours
    w[wi].disabled = true;
    Browser Cookie Limits
    FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format)
    递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
    从交集角度考虑订房系统的时间连续性
    glup 压缩图片
  • 原文地址:https://www.cnblogs.com/wuyw/p/5317119.html
Copyright © 2020-2023  润新知