求子数组和值最大的两种方法

对于一个数组,求其子数组,使得子数组的元素之和最大。


方法一:利用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;
	}


main函数如下:

<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/

你可能感兴趣的:(动态规划,最大和子数组)