zoukankan      html  css  js  c++  java
  • 结对开发——循环数组的最大值

    题目要求:

      

      返回一维数组中最大子数组的和

      输入一个整形数组,数组里有正数也有负数。

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

      如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。

      同时返回最大子数组的位置。

      求所有子数组的和的最大值。

      要求时间复杂度为O(n)

    设计思路:(结对思考以及参考于其他同学)

      考虑到数组需要首尾相连,采取把数组的长度增加两倍,并把复制的数组写在在最后一个数的后面,这样在循环的过程中并不需要采用新的算法,只要把原来的代码稍微修改一下,加一个判断使得组成最大数组的长度不超过原数组的长度即可。

    三,代码

    #include <iostream.h> 
    #include <stdlib.h> 
    int main() 
    { 
        int num,length,start,finish; 
        start=0; 
        finish=0; 
        cout<<"请输入数组元素个数:"; 
        cin>>length; 
        num=2*length;       //分配2倍数组空间,方便下次比较 
        int* Array=new int[num];     //分配数组空间 
          
        for(int i=0;i<length;i++)    //数组正负交替出现 
        {    
            if(i%2==0) 
                Array[i]=rand()%1000; 
            else
                Array[i]=0-(rand()%1000); 
        } 
        cout<<"数组为:"; 
        for(i=0;i<length;i++) 
        {     
            cout<<Array[i]<<" "; 
        } 
        cout<<endl; 
      
        //以下代码参考与其他同学以及度娘 
        int max=Array[0]; 
        int sum=0;      //定义求和变量 
        for(i=0;i<length;i++) 
        { 
           sum=0; 
           for(int j=i;j<length+i;j++) 
           { 
               sum=sum+Array[j]; 
               if(sum>max) 
               { 
                   max=sum; 
                   start=i; 
                   finish=j; 
               } 
           } 
           Array[length+i]=Array[i];  //每次将已经计算过的数放到最后 
        } 
        if(finish>=length) 
        { 
            cout<<"最大子数组起始位置为:"<<start+1<<endl; 
            cout<<"最大子数组终止位置为:"<<finish-length+1<<endl; 
        } 
        else
        { 
            cout<<"最大子数组起始位置为:"<<start+1<<endl; 
            cout<<"最大子数组终止位置为:"<<finish+1<<endl; 
        } 
        cout<<"最大子数组为:"<<endl; 
        for(int m=start;m<=finish;m++) 
        { 
            cout<<Array[m]<<" "; 
        } 
        cout<<endl; 
        cout<<"最大子数组的和为:"<<endl; 
        cout<<max<<endl; 
      
        delete []Array; 
        return 0; 
    } 

    四,实验截图

    五,结对开发体会

    本次实验明显队友比我付出的多,但是这也体现了结对开发的魅力所在,并不是说每个人付出的必须等价,让每个人处于尽可能自由的状态有时候会事半功倍。

  • 相关阅读:
    PHP 扩展开发
    redis 简单动态字符串 SDS
    解决 call to undefined function mssql_connect 报错
    aws lnmp环境搭建 绑定域名
    PHP 内存管理 写时复制 垃圾回收
    CSS3详解:transform、transition
    详细图解window环境mongodb下载、安装、配置与使用
    介绍一款好用 mongodb 可视化工具
    安装MongoDB启动时报错‘发生系统错误2’的解决办法
    .md即markdown文件的基本常用编写语法
  • 原文地址:https://www.cnblogs.com/lllzy/p/4379550.html
Copyright © 2011-2022 走看看