给定一个整数数组,返回数组中连续的最大子序和。
声明一个同样大小的辅助数组temp,保存当前位置最大的子序和。
然后对这个temp数组求最大值。
求数组的最大值可以用 分治法 或者 调用Arrays的API
import java.util.Arrays;
public class maxSubstring {
public static int getArrMaxDivide(Integer arr[], int strat, int end) {
if (strat == end) {
return arr[strat];
}else {
int leftMax = getArrMaxDivide(arr, strat, (end+strat) / 2);
int rightMax = getArrMaxDivide(arr, (end+strat) / 2 + 1, end);
return leftMax > rightMax ? leftMax : rightMax;
}
}
public static int maxSubstring(Integer arr[]) {
Integer temp;
Integer[] sum = new Integer[arr.length];
sum[0] = arr[0];
for (temp = 1; temp < arr.length; temp++) {
if (sum[temp-1] + arr[temp] < arr[temp]) {
sum[temp] = arr[temp];
}else {
sum[temp] = sum[temp-1] + arr[temp];
}
}
return getArrMaxDivide(sum, 0, sum.length-1); // 分治法返回数组最大值
// Arrays.sort(sum); //调用API先排序,返回数组最大值
// return sum[sum.length-1];
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer[] arr = new Integer[9];
arr[0] = -2;
arr[1] = 1;
arr[2] = -3;
arr[3] = 4;
arr[4] = -1;
arr[5] = 2;
arr[6] = 1;
arr[7] = -5;
arr[8] = 4;
System.out.println(maxSubstring(arr));
}
}