最大子陣列和
阿新 • • 發佈:2020-07-01
最大子陣列和
給定一系列整數,求出其中連續的整數的和的最大值
{-2,11,-4,13,-5,-2}
第2個至第4個連續數的和最大,為20
解決方案
設定
符號 | 含義 |
---|---|
a[] | 目標陣列 |
maxEndBy(i) | 以下標 i 為結尾的的最大陣列和 |
maxSum | 目標陣列的最大子陣列和 |
分解
\[maxEndBy(i+1)=\max(maxEndBy(i)+a[i+1],a[i+1]) \]
\[maxSum=\max_{0\le i<length}{maxEndBy(i)} \]
Java
public class MaxSubArraySum { public static int maxSum(int ...arr){ int maxEndBy=0; int maxSum=Integer.MIN_VALUE; for(int i=0;i<arr.length;i++){ if(maxEndBy>0){ maxEndBy+=arr[i]; }else { maxEndBy=arr[i]; } if(maxEndBy>maxSum) maxSum=maxEndBy; } return maxSum; } public static void main(String[] args) { System.out.println(maxSum(-2,11,-4,13,-5,-2)); } }