求子陣列和值最大的兩種方法
阿新 • • 發佈:2019-01-06
對於一個數組,求其子陣列,使得子陣列的元素之和最大。
方法一:利用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/