java小测试(返回一个整数数组中最大子数组的和)
今天进行了一个java小测试,测试内容为返回一个整数数组中最大子数组的和。
思路为(在我们班大佬的讲解下做出来的):假设有x个整数,整数中有正数和负数,存放在一个数组num[]中。在定义一个新数组a【】,表示从下表为0到下表为i的子数组的最大和,从0开始往后面走,知道前i-1个子数组的最大和,判断第i个整数,如果为负数,a【】中存放为0,为正数,则把a[i-1]+num[i]存放在a[i]中,这样就是a【】数组中存放的都是子数组的最大和,最后在a[]中找到最大的。
源代码:
public static void main(String[] args ) {
int num[]= {1,2,-3,4,-5,-7,-3,5} ;
int add[]={0,0,0,0,0,0,0,0};
int max;
int i=0;
int length=num.length;
add[0]=num[0];
for(i=1;i<length;i++) {
if(num[i]<0) {
add[i]=0;
}else {
add[i]=num[i]+add[i-1];
}
}
max=add[0];
for(i=0;i<length-1;i++) {
if(add[i+1]>max) {
max=add[i+1];
}
}
System.out.print(max);
}
这样感觉还是有问题,比如如果数组为1,2,-1,4 ,那么判断-1对应的位置为0,从-1截断,4不加前面的数,但是1+2-1+4=6,是比单纯的4大的,而且当数组中有0的时侯判断也不准确。这还需要进一步完善。