需要Max子阵列提示

时间:2017-02-23 04:19:32

标签: java algorithm

  

在数组中找到连续的子数组(至少包含一个   数量)具有最大的总和。

     

例如,给定数组[-2,1,-3,4,-1,2,1,-5,4],连续   子阵列[4,-1,2,1]的最大和= 6。

我无法解决这个问题,但我想提一些提示。

它说这可以使用动态编程解决,但我很难看到连接。

DP连接是否会采用整个数组的总和?

2 个答案:

答案 0 :(得分:-1)

可以找到问题的参考here

你必须使用Kadane的算法来解决这种情况,如下所示:

static int maxSubArraySum(int a[])
{
    int size = a.length;
    int max_so_far = Integer.MIN_VALUE, max_ending_here = 0;

    for (int i = 0; i < size; i++)
    {
        max_ending_here = max_ending_here + a[i];
        if (max_so_far < max_ending_here)
            max_so_far = max_ending_here;
        if (max_ending_here < 0)
            max_ending_here = 0;
    }
    return max_so_far;
}

供您参考的示例代码:

monkeyrunner

答案 1 :(得分:-1)

请找到Java代码。

public static void findMaxSubArray(int arr[]){

    int max_end_her=arr[0];
    int max_so_far=arr[0];

    int x=arr[0];
    for(int i=1;i<arr.length;i++){
        max_end_her=Math.max(x, max_end_her+arr[i]);
        max_so_far=Math.max(max_so_far, max_end_her);   
    }



System.out.println(max_so_far); 

}