• 结对开发,首位相邻的数组求最大子数组


    结对人员:张世通  梁世豪

    一、题目

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

    二、设计思路

      1、在上一次求一维数组最大子数组的问题上,进行拓展,继续使用类似的求和方法

      2、通过定义变量start,finish确定最大子数组的起始位置和终止位置

      3、每次将所有与数组元素A[i]有关的子数组求出后,将A[i]的值付给A[length+i];

      4、循环到最后一个数组元素A[length-1]时终止,即可遍历完所有数组元素

    三、代码

     1 // ketang6.cpp : 定义控制台应用程序的入口点。
     2 //
     3 #include"stdafx.h"
     4 #include "iostream"
     5 using namespace std;
     6 
     7 /*确定求和存储数组元素*/
     8 void Son(int Arr[],int length,int start,int finish)
     9 {
    10     int max=Arr[0];
    11     int add=0;//定义求和变量
    12      for(int i=0;i<length;i++)
    13      {
    14         add=0;
    15         for(int j=i;j<length+i;j++)
    16         {
    17             add=add+Arr[j];
    18             if(add>max)
    19             {
    20                 max=add;
    21                 start=i;
    22                 finish=j;
    23             }
    24         }
    25         Arr[length+i]=Arr[i];                                //每次将已经计算过的数放到最后
    26      }
    27      if(finish>=length)
    28      {
    29          cout<<"最大子数组起始位置为:"<<start+1<<endl;
    30          cout<<"最大子数组终止位置为:"<<finish-length+1<<endl;
    31      }
    32      else
    33      {
    34          cout<<"最大子数组起始位置为:"<<start+1<<endl;
    35          cout<<"最大子数组终止位置为:"<<finish+1<<endl;
    36      }
    37      cout<<"最大子数组为:"<<endl;
    38      for(int m=start;m<=finish;m++)
    39      {
    40          cout<<Arr[m]<<" ";
    41      }
    42      cout<<endl;
    43      cout<<"最大子数组的和为:"<<endl;
    44      cout<<max<<endl;
    45 }
    46 
    47 /*主函数*/
    48 int main()
    49 {
    50     int num,length,start,finish;//定义原始数组长度length,求和存储数组长度num
    51     start=0;
    52     finish=0;
    53     cout<<"请输入数组元素个数:";
    54     cin>>length;
    55     num=2*length;
    56     int* Arr=new int[num];//定义原始数组
    57     cout<<"请输入数组数据"<<endl;
    58     for(int i=0;i<length;i++)
    59     {    
    60         cin>>Arr[i];
    61     }
    62     cout<<endl;
    63     Son(Arr,length,start,finish);
    64     delete []Arr;
    65     return 0;
    66 }

    四、运行结果

    五、总结收获

    还是延续了第一次实验的主要想法,但因为一开始我们的代码没有实现求出位置,这次是新加的,就是时间复杂度没有达到题目的要求。和世通合作讨论的过程很愉快,我也很喜欢这种很有感觉的交流。老师说得对,我们在和别人合作编写软件的过程中应该多一些面对面的交流。

    通过这么几次的软工作业,我越发觉得应该多学学怎么和别人合作,自己这方面很需要锻炼,以前一个人觉得还挺好,现在发现有人一起搭伙效率比自己用两倍时间做的事情还多,效率真的提高了很多!

    六、合影

  • 相关阅读:
    php pdf添加水印(中文水印,图片水印)
    论文阅读---Reducing the Dimensionality of Data with Neural Networks
    Deep Learning综述[下]
    Install-Package:QRCoder已拥有为System.Drawing.Common定义的依赖项
    linux和windows之间传递文件
    IPV6修复工具
    Deep Learning综述[上]
    novaclient开发中遇到的问题小结
    easybcd删除win10启动项如何恢复?
    uefi+gpt安装双系统
  • 原文地址:https://www.cnblogs.com/zglsh/p/4376500.html
Copyright © 2020-2023  润新知