设计思路:
首先可以确定,最大的子数组肯定是以正数开头的,否则前面加上一个负数的值肯定会比现在还小。假设是正负正的情况,我们只要判断前面的正负的和,是否大于0,如果没有大于0则可以直接抛弃。
所以设计思路是有一个求和的值。每次遍历将最新的数进行求和的时候判断上一次的求和是否大于0.小于0则重新开始。然后将求和值大于0的值赋值给最终的变量。每次只有求和值超过最终值的时候,才能覆盖最终值。
public static int sumMaxNum(int[] array){
int sum = 0;
int result = array[0];
for (int i = 0; i < array.length; i++) {
if(sum>=0){
//将当前元素的值加到求和中
sum += array[i];
}else{
//如果求和小于0,则求和为当前的元素
sum = array[i];
}
//如果目前的求和比之前的要大,则将最新的求和替换掉之前的求和
if(sum > result){
result = sum;
}
}
return result;
}
public static void main(String[] args) {
int maxSum = sumMaxNum(new int[]{3, -2, 3, 10, -4, 7, 2, -5, 6});
System.out.println(maxSum);
}
参考链接:java 最大子数组_求一个数组中子数组的最大和算法(Java实现)_weixin_39865625的博客-CSDN博客