这个题目的要求是,返回一个整数数组中最大子数组的和。即输入一个整形数组,数组里面又正数也有负数,数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。球所有子数组的最大值。
我开始的思路是首先是选一个数组,然后这个数组中的最大值一定在这个和最大的子数组中,然后从头开始找一个正数,然后正数和其后面的数加起来,如果小于0则舍去,如果大于0,就先算进来,然后这两个数在和后面的一个数加起来,然后再比较是大于0还是小于0。依次类推,这个最大的数后面也是如此,从最后开始找第一个不是0的数开始,依次类推。但是之后又同学上台讲述自己的思路,同学和老师一起提出这个数组中的最大值不一定在这个和最大的子数组中。
然后我想,可以设三个变量。一个是maxnum,即最大值;一个是maxsum,即最大的和,还有一个a。然后把数组中的一个值赋值给maxnum,然后设一个变量i,使用for循环,如果maxnum<数组中第i+1个数,就把这个数赋值给mannum,然后用a加上这个数组中的第一个数,然后如果a>0,那么把a的值赋值给maxsum。如果a<0,则再把0赋值给a。然后再用maxnum与第二个数进行比较,之后再把第二个数加到a上,再对a是否小于0进行比较。然后把a于maxsum进行比较。依次类推。这样就可以找出和最大的子数组。代码如下。
package 数组; public class shuzu { public static int findmaxsum(int[] array) { int maxsum=0; int a=0; int maxnum=array[0]; for(int i=0;i<array.length;i++) { if(maxnum<array[i]) { maxnum=array[i]; } a+=array[i]; if(a<0) { a=0; } if(a>maxnum) { maxsum=a; } } if(maxnum<0) return maxnum; return maxsum; } public static void main(String args[]) { int array[]={1,-2,3,10,-4,7,2,-5}; System.out.println(shuzu.findmaxsum(array)); } }
结果截图为: