您的位置:首页 > 其它

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

2016-04-15 17:07 85 查看
题目:

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

要求: 输入一个一维整形数组,数组里有正数也有负数。 一维数组首尾相接,象个一条首尾相接带子一样。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。

设计思想:

(1)存在三个一维数组。第一个用于存储 输入的数组;第二个用于存储不同子数组的最大值;第三个用于存储 起始点不同的数组的最大值。

(2)1、定制输入整数的个数

2、创建第一个一维数组,将数字输入

3、 利用循环,将所存在的第一个数组的数,进行加法计算,如果和为正数,继续计算;若和为负数,则下一个重新开始计算。所有计算结果放在第二个一维数组中,将第二个数组中,求最大值,放入第三个数组。

4、在第一个数组中,不同的位置为 计算开始,重复进行 3 。

5、求出第三个数组的最大值。输出

[b]源代码:[/b]

import java.util.Scanner;
public class CircleShuzu
{
public static void main(String args[])
{
Scanner shu=new Scanner(System.in);
System.out.println("请输入整数的个数:");
int count=shu.nextInt();
while(count<=0)
{
System.out.println("输入错误,请重新输入:");
count=shu.nextInt();
}
int Array[]=new int[count];
int Crray[]=new int[count];
System.out.println("请输入整数");
for(int i=0;i<count;i++)
{
Array[i]=shu.nextInt();
}

for(int j=0;j<count;j++)
{
int b=1;
int Brray[]=new int[100];
Brray[0]=Array[j];
if(j==count-1)
{
for(int i=0;i<count-1;i++)
{
if(Brray[b-1]<=0)
{
Brray=Array[i];
}
if(Brray[b-1]>0)
{
Brray[b]=Brray[b-1]+Array[i];
}
if(i==j-1)
{
break;
}
b++;
}
}
for(int i=j+1;i<count;i++)
{
if(Brray[b-1]<=0)
{
Brray[b]=Array[i];
}
if(Brray[b-1]>0)
{
Brray[b]=Brray[b-1]+Array[i];
}
if(i==count-1)
{
i=-1;
}
if(i==j-1)
{
break;
}
b++;
}
int Max1=Brray[0];
for(int i=1;i<count;i++)
{
if(Brray[i]>Max1)
{
Max1=Brray[i];
}
}
Crray[j]=Max1;
}
int Max2=Crray[0];
for(int m=1;m<count;m++)
{
if(Crray[m]>Max2)
{
Max2=Crray[m];
}
}
System.out.println("数组最大值为:"+Max2);
}
}


[b]结果截图:








合作过程体会:

通过讨论,我们在之前的题进行了改进,之前的题我们用的是二维数组,这次我们用多个一维数组来解决问题,进一步从不同首项遍历,选取最大值就行了。

两人一起分析程序,我编写代码,王艺霖复审,遇到错误,共同解决。

冲突解决:

当首项为最后一个数时,跳过了之前设计的循环,从而导致错误。所以给最后的首相列出了单独的计算。

[b]总结:[/b]

两次设计思想差不多。有所改变的是将二维数组改为一维数组,多个数组来储存所需要的值。合作开发能高效率地解决一些问题,方向能够更准确。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: