1. 程式人生 > 實用技巧 >最大子陣列和

最大子陣列和

最大子陣列和

給定一系列整數,求出其中連續的整數的和的最大值

{-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));
        }
    }