题目:返回一个整数数组中最大子数组的和。
要求:
输入一个一维整形数组,数组里有正数也有负数。
一维数组首尾相接,象个一条首尾相接带子一样。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。
程序设计思想:程序中使用到一个用来求数组的最大子数组和的函数,这里可以将原数组的前n-1项加到数组的后面,形成一个新的数组,这样就可以求这种首尾相连的数组的最大子数组和了。
源代码:
public class zishuzu {
/**
* @param args
*/
public static int max(int array[])
{
int Max=0;
int sum=0;
int len;
len=array.length;
for(int i=0;i<len;i++)
{
sum+=array[i];
if(sum>Max)
{
Max=sum;
}
if(sum<0)
{
sum=0;
}
}
return Max;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[]={1,2,-3,5,7,-8};
System.out.print("测试数组为:");
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+",");
}
System.out.println("");
System.out.println("该数组最大子数组的值为:"+max(a));
int b[]={1,2,-3,5,7,-8,1,2,-3,5,7};
System.out.print("将数组首尾相连后,数组等价于:");
for(int k=0;k<b.length;k++)
{
System.out.print(b[k]+",");
}
System.out.println("");
System.out.println("该数组最大子数组的值为:"+max(b));
}
}
试验结果截图:
周活动总结表:
日期/任务 |
听课 |
阅读课本 |
课下学习 |
日总计 |
|
周日3.26 |
|||||
周一 |
120m |
30m |
30m |
150m |
|
周二 |
40m |
40m |
|||
周三 |
50m |
50m |
|||
周四 |
120m |
40m |
20m |
180m |
|
周五 |
40m |
40m |
|||
周六 |
40m |
40m |
|||
周总计 |
240m |
70m |
2100m |
540m |
时间记录日志:
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
C |
U |
3.6 |
14:00 |
16:00 |
10m |
110m |
上课,编程 |
软件工程课 |
|
|
3.7 |
19:00 |
21:00 |
20m |
100m |
看书,编程 |
写软件工程作业 |
|
|
3.8 |
19:00 |
21:00 |
15m |
105m |
看书,编程 |
学javaweb |
|
|
3.9 |
16:00 |
18:00 |
10m |
110m |
上课 |
Javaweb上课 |
|
|
3.10 |
18:00 |
20:00 |
30m |
90m |
构思,写java |
写四则运算程序3 |
|
|