1. 程式人生 > >求子陣列和值最大的兩種方法

求子陣列和值最大的兩種方法

對於一個數組,求其子陣列,使得子陣列的元素之和最大。

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