对于一个数组,求其子数组,使得子数组的元素之和最大。
方法一:利用DP动态规划
java源代码如下:
public int maxSubArray1(int[] A) {
int max = A[0];
int[] sum = new int[A.length];
sum[0] = A[0];
for (int i = 1; i < A.length; i++) {
sum[i] = Math.max(A[i], sum[i - 1] + A[i]);
max = Math.max(max, sum[i]);
}
return max;
}
方法二:更简单
java源代码如下:
public int maxSubArray2(int[] A) {
int newsum = A[0];
int max = A[0];
for (int i = 1; i < A.length; i++) {
newsum = Math.max(newsum + A[i], A[i]);
max = Math.max(max, newsum);
}
return max;
}
<pre name="code" class="java"> public static void main(String[] ars) {
int[] a = { -2, 1, -3, 4, -1, 2, 1, -5, 4};
MaxSubArray array = new MaxSubArray();
int max = array.maxSubArray1(a);
// int max = array.maxSubArray2(a);
System.out.println(max);
}
运行结果如下:
6
参考文章:
1、http://www.programcreek.com/2013/02/leetcode-maximum-subarray-java/