输入一个整形数组,返回一个整数数组中最大子数组的和
我刚刚开始的思路是这样的:
既然求的是最大的和,那么只要确定负数所在的位置就好了,因为只有负数才会让和变小。所有我先找到负数。
当我查找到第一个负数的时候,我将其前面的所有整数和加在一起,保存在一个变量中。然后在查找第二个负数,然后将这个负数与第一个负数的之间的所有正数相加,将其与第一个负数的绝对值进行比较。
如果整数和更大,那么将第二个负数前面的所有数相加,保存在变量中。然后第二个负数变为第一个负数。在重复步骤。
如果是负数绝对值更大,那么将第一个负数去掉,第二个负数变为第一个重复步骤。
后来我发现这样是纯在bug的,当出现极端情况下,如所有的数都是负数,那么对于程序啧会出现乱码。
最后我还是用了庄忠旭的方法。写出了如下代码。
package qiuhe; public class qiuhe { public static void main(String args[]) { int array[] = {0,-2,3,10,-4,7,2}; System.out.println(findMax(array)); } public static int findMax(int array[]){ if (array.length == 0) { return 0; } int max = array[0]; int sum = 0; for(int i=0; i<array.length; i++){ if(sum >= 0) { sum += array[i]; } else{ sum = array[i]; } if(sum > max){ max = sum; } } return max; } }