您的位置:首页 > 其它

软件工程之返回整数数组的子数组和的最大值

2014-03-10 19:51 148 查看
  先声明一下,结对开发人员是张永&吴盈盈。

  又是一次战斗的课堂,先前的自己没有经过这么限时的训练,以至于我这只小菜鸟受到了致命的摧残,写个程序一头汗都出来了,悲催的,建民老师,开恩啊。不过这样的课堂多多益善吧。

方案一:

  这个题目对所有的人来说都很简单了,看到这个题目很快就能够想到一种解决方案,把所有子数组的和都求出来,然后再求出和最大的那个值输出来,我和盈姐讨论的还是很激烈的,赶时间,把思想转换成代码,选择了java(我这搭档好像把java的语法忘得差不多了。。。),紧张的写了20多分钟,这种场合简直限制我的思维啊,幼小的心灵受到了暴风雨似的摧残。在建民老师一声口令下,交给了盈姐(建民老师搞的一套)。紧张的盈姐敲键盘都有点哆嗦了哈。没事,反正大家都是鸟,我们还是好鸟呢。过了一会,哎,实现了。想让老师看一下我们的结果。这个建民老师啊,竟然让我们给他看讨论的稿子,我去,想法都在脑子里呢。结果看都不看了。拉倒,先把代码贴在这:

/**
* @Name: sum
* @Description: 将一个整数数组的所有子数组的和存放到sumList集合中
* @Author: 张永&吴盈盈(作者)
* @Version: V1.00 (版本号)
* @Create Date: 2014-3-10 (创建日期)
* @Parameters:int number[]
* @Return: 无
*/
public void sum(int number[])
{
int sum=0;
String indexs="";
for(int i=0;i<number.length;i++)
{
for(int j=0;j<number.length;j++)
{
for(int n=i;n<=j;n++)
{
sum=sum+number
;
indexs=indexs+n;//记录子数组的索引
}
SumObject sumObject=new SumObject(sum,indexs);
sum=0;
indexs="";
sumList.add(sumObject);
}
}
}

/**
* @Name: MaxOfSum
* @Description: 在集合类sumList中选出最大的那个对象
* @Author: 吴盈盈(作者)
* @Version: V1.00 (版本号)
* @Create Date: 2014-3-10 (创建日期)
* @Parameters:无
* @Return: MaxOfSum对象
*/
public SumObject MaxOfSum()
{
int max=0;
String indexs="";
for(int i=0;i<sumList.size();i++)
{
if(max<sumList.get(i).getSum())
{
max=sumList.get(i).getSum();
indexs=sumList.get(i).getIndexs();
}
}
SumObject sumObject=new SumObject(max,indexs);
return sumObject;
}


测试数据:1.num[]={-1,-2,3}; 结果:3 2.num[]={1,2,3}; 结果:6

方案二:

  虽然第一种方法实现了,但是这道出自《编程珠玑》的题目,在这本书上给出了四个算法,老师让我们找出一个线性算法。好家伙,这可是真真的用到了数学功底啊,我都想找数学老师来探讨一下了。。。还是和队友想想吧,在网上参考了一下别人的思想,这个算法果然很好,用一个变量max记录子数组和的最大值,然后遍历数组(索引从0开始变化),再用一个可能的最大值变量max1,数组的下标每增加1: 当前的和max1和0比较,如果小于零,证明当前索引的数组是个负数而且很大,下次子数组直接从当前元素的下一项开始;如果max1的值大于max,则让max=max1;直到遍历结束,则max中存放的就是最大值。写了这么多文字,不知道有没有描述清楚,给出代码实现吧:

/**
* @Name: bestSearchMaxSum
* @Description: 在求子数组的最大和
* @Author: 张永&吴盈盈(作者)
* @Version: V1.00 (版本号)
* @Create Date: 2014-3-10 (创建日期)
* @Parameters:整型数组number[],SumObject对象maxSumObject
* @Return: SumObject对象
*/

public SumObject bestSearchMaxSum(int number[], SumObject maxSumObject)
{
int i;
int max=0;
String indexStart="";
String indexEnd="";
for ( i = 0; i < number.length; i++ )
{
if ( (max= number[i] + max) > 0 )
{
indexEnd = i+"";
}
else
{
indexStart = ""+(i + 1);
max = 0;
}
if ( max > maxSumObject.getSum() )
{
maxSumObject.setSum(max);
}
}
maxSumObject.setIndexs(indexStart+indexEnd);
return maxSumObject;
}


还是方案一的测试数据,结果完全正确,这次的算法,就符合老师所谓的线性算法了吧,建民老师,这次看看吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: