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


    一、实验要求:

    输入一个整形数组,数组里有正数也有负数。
    数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
    如果数组A[0]……A[j-1]首尾相邻,允许A[i-1],…… A[n-1],A[0]……A[j-1]之和最大。
    同时返回最大子数组的位置。
    求所有子数组的和的最大值。
    结对编程要求:
    两人结对完成编程任务。
    一人主要负责程序分析,代码编程。
    一人负责代码复审和代码测试计划。
    发表一篇博客文章讲述两人合作中的过程、体会以及如何解决冲突(附结对开发的工作照)

    二、实验思路:

    1. 联系思考如果不是循环数组的话,一个普通的数组,求他们的连续的最大子数组的和的最大值,应该怎么实现,例如:1,2,3,4,5 如果是一个循环数组,那么其中的3,可以组成的数组最大就不是3,4,5,而是3,4,5,1,2
    2. 循环数组从那个数开始,那么相当于在那个数的位置切开,他的最大子数组,就是和他相邻的但是断开后不相邻的那个位置,例如从4开始,和4相邻的是3和5,当截断后可以看成是一个普通数组4,5,1,2,3,其中的3就是和他相邻但是截断后不相邻的数
    3. 如果想求这个数组,我们可以把这个数组扩展一下,如1,2,3,4,5我们可以扩展成1,2,3,4,5,1,2,3,4 ,也就是在最后一个数的后面再加上他前面的数,然后我们在取最长的子数组的时候,可以按照第二个新构建的数组,从其中取连续的五个,这个是满足要求的数组

    三、团队成员:曾凯   王志伟

    四、开发照片:

      

    五、实验代码:

    package demo3;
    public class Route {
        public static void main(String[]args)
        {
            int a[]={1,2,3,4,5,6};
            int b1[] = new int[2*a.length-1];
            for(int i=0;i<a.length;i++)
            {
                b1[i]=a[i];
            }
            for(int i=a.length;i<2*a.length-1;i++)
            {
                b1[i] = a[i-a.length];
            }
            int b[]=panduan(a);
            System.out.print("最大子数组是:");
            for(int i=b[1];i<=b[2];i++)
            {
                System.out.print(b1[i]+"  ");
            }
            System.out.println("
    最大值是:"+b[0]);
        } 
        static int[] panduan(int[] a)
        {
            int b[] = new int[2*a.length-1];
            for(int i=0;i<a.length;i++)
            {
                b[i]=a[i];
            }
            for(int i=a.length;i<2*a.length-1;i++)
            {
                b[i] = a[i-a.length];
            }
            int [][]a1= new int[b.length][b.length];
            for(int i=0;i<a.length;i++)
            {
                for(int j=i;j<b.length&j-i<a.length;j++)
                {
                    a1[i][j]=0;
                }
            }
            for(int i=0;i<a.length;i++)
            {
                for(int j=i;j<b.length&j-i<a.length;j++)
                {
                    if(j==i)
                    {
                        a1[i][j]=b[j];
                    }
                    else
                    {
                        
                        a1[i][j]+=b[j]+a1[i][j-1];
                    }
                }
            }
            int max=a1[0][0];
            int i1=0;
            int j1=0;
            for(int i=0;i<a.length;i++)
            {
                for(int j=i;j<b.length&j-i<a.length;j++)
                {
                    if(max<a1[i][j])
                    {
                        max=a1[i][j];
                        i1=i;
                        j1=j;
                    }
                }
            }
            int a2[]=new int[3];
            a2[0]=max;
            a2[1]=i1;
            a2[2]=j1;
            return a2;
        }
    }

    六、结果截图:

    七、实验总结:

      通过这次两人团队的协助编程,其中我主要负责代码测试部分,代码编程部分由另一名组员完成,经过大概一个多小时的讨论和编码,最终完成。开始的时候,主要是讨论两个人对本题的思路,然后动笔在纸上写了一个数组,然后按照普通的数组,先想普通数组求这个最大子数组的和,应该如何实现,接着通过交流两个人的对算法的理解,最后实现了这个功能。

      通过这次实验,我也增加了团队沟通和协助能力。

  • 相关阅读:
    上下,流动
    面对离去了的亲人,
    计算 star 之间 距离,
    咀嚼,
    python中的内嵌函数
    python中全局变量和局部变量
    python中函数的闭包
    python中函数的收集参数
    python中如何将局部变量扩展为全局变量(global关键字)
    python中的内嵌函数
  • 原文地址:https://www.cnblogs.com/dmego/p/7009519.html
Copyright © 2020-2023  润新知