在数组中找到连续的子数组(至少包含一个 数量)具有最大的总和。
例如,给定数组[-2,1,-3,4,-1,2,1,-5,4],连续 子阵列[4,-1,2,1]的最大和= 6。
我无法解决这个问题,但我想提一些提示。
它说这可以使用动态编程解决,但我很难看到连接。
DP连接是否会采用整个数组的总和?
答案 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);
}