2018-08-09

动态规划之最大子段和问题

问题描述

有一个由呢个整数组成的数列A={a1,a2,......,an},截取其中从i - j开始的子段并计算字段和,求最大的字段和为多少?
例如A={1,3,-5,3,-2,5,-4,3}
则其最大字段和为3+(-2)+5 =6

使用动态规划算法求解问题

假设最大子段和设为M
设从1到j中包括a[j]的最大子段和为b[j]
所以有:
b[j] = max{b[j-1]+a[j],a[j]}
M = max{b[j]} ( 1=

代码求解

public class MaxSum {
    public static void maxSum(int[]arr){
        int sum=0,b=arr[0];
        for(int i=1;i0) b+=arr[i];
            else b = arr[i];
            if(b>sum) sum=b;
        }
        System.out.println(sum);
    }
    public static void main(String[]args){
        int[] arr={1,3,-5,3,-2,5,-4,3};
        maxSum(arr);
    }
}

算法复杂度为O(n)

你可能感兴趣的:(2018-08-09)