美文网首页
2018-08-09

2018-08-09

作者: Ping接未来 | 来源:发表于2018-08-09 16:04 被阅读0次

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

    问题描述

    有一个由呢个整数组成的数列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=<j<=n)

    代码求解

    public class MaxSum {
        public static void maxSum(int[]arr){
            int sum=0,b=arr[0];
            for(int i=1;i<arr.length;i++){
                if(b>0) 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

          本文链接:https://www.haomeiwen.com/subject/ughcbftx.html