给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。
给出数组[−2,2,−3,4,−1,2,1,−5,3]
,符合要求的子数组为[4,−1,2,1]
,其最大和为6
累加和sum 如果sum<0 sum抛弃原来的值 sum还原为0 继续加 如果sum>0 继续加 然后返回最大值 代码如下
package jason;
import java.util.ArrayList;
import java.util.List;
/*
*/
class Test {
public static int MaxSubArr(int[] arr) {
if (arr == null || arr.length == 0) return 0;
int sum = 0;
int ret = arr[0];
List<Integer> list = new ArrayList<>();
for(int i=0; i<arr.length; i++) {
sum += arr[i];
if (sum <= 0) {
sum = 0;
}else {
list.add(arr[i]);
}
System.out.println("第 "+i+"次"+sum);
}
if (sum > ret) {
ret = sum;
}
System.out.println(list);
return ret;
}
public static void main(String[] args) {
int[] arr = new int[]{-11,4,5};
int result = MaxSubArr(arr);
}
}