zoukankan      html  css  js  c++  java
  • 4、软件工程结对开发之求一维数组中连续最大子数组之和

    一、题目:返回一个整数数组中最大子数组的和。
    二、要求:
    输入一个整形数组,数组里有正数也有负数。
    数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
    如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。
    同时返回最大子数组的位置。
    求所有子数组的和的最大值。 要求时间复杂度为O(n)。

    三、设计思想

      在上次试验的基础上,利用动态数组,为了满足首尾相连,所以在计算一次之后,

    要把该数放在数组的最后边,这样循环遍历,最后求得最大数组之和及他们所在的位置。

    四、源代码

     1 #include <iostream.h>
     2 void Arr_Maxsum(int arr[],int length,int first,int last)
     3 {
     4     int count=0;
     5     int result=arr[0];
     6     int sum=arr[0];//初始化
     7     for(int i=0;i<length;i++)
     8     {
     9         sum=0;
    10         for(int j=i;j<length+i;j++)
    11         {
    12             sum+=arr[j];
    13             if(sum>result)
    14             {
    15                 result=sum;
    16                 first=i;
    17                 last=j;
    18             }
    19         }
    20         arr[length+i]=arr[i];
    21     }
    22     if(last>=length)
    23     {
    24         cout<<"最大子数组起始位置为:"<<first+1<<endl;
    25         cout<<"最大子数组终止位置为:"<<last-length+1<<endl;
    26     }
    27     else
    28     {
    29         cout<<"最大子数组起始位置为:"<<first+1<<endl;
    30         cout<<"最大子数组终止位置为:"<<last+1<<endl;
    31     }
    32     cout<<"最大子数组为:"<<endl;
    33     for(int m=first;m<=last;m++)
    34     {
    35         cout<<arr[m]<<"  ";
    36     }
    37     cout<<endl;
    38     cout<<"最大子数组的和为:"<<endl;
    39     cout<<result<<endl;
    40 }
    41 int main()
    42 {
    43     int num,length,first,last;
    44     first=0;
    45     last=0;
    46     cout<<"请输入数组元素个数:";
    47     cin>>length;//数组长度
    48     num=2*length;
    49     int* arr=new int[num];
    50     cout<<"请输入数组数据:"<<endl;
    51     for(int i=0;i<length;i++)
    52     {    
    53         cin>>arr[i];
    54     }
    55     cout<<endl;
    56     Arr_Maxsum(arr,length,first,last);
    57     delete []arr;
    58     return 0;
    59 }

    五、运行结果截图

    六、实验总结

      本次试验刚开始的时候我们俩的设计思路还不太明确,想用链表实现,但链表的知识还都不太会,

    经过一番讨论与思考决定还是利用上次的动态数组完成实现。在编程过程中的一些细节知识还把握的不好,

    程序修改了很多次才能运行,我们俩都收获了宝贵的经验。

    七、合作照片

  • 相关阅读:
    Using Spark's "Hadoop Free" Build
    关于Consul
    关于Eureka
    关于Gateway
    关于Ribbon
    关于Hystrix
    关于Feign
    关于SpringBoot
    关于架构
    关于敏捷开发Scrum(一)
  • 原文地址:https://www.cnblogs.com/czl123/p/4377744.html
Copyright © 2011-2022 走看看