最大子数组和问题,这个大家都知道,求一个数组中和最大的连续子数组,编程珠玑上有讲过
例如
1 2 3 4 -> 10
-1 -2 -3 -4 -> -1
-1 2 3 -2 -> 5
-2 3-1 4 -1 ->6
有复杂度为O(n^3),O(n^2), O(nlgn)的代码,也有复杂度为O(n)的动态规划代码
#include <stdio.h>
#include <assert.h>
#define N 100
int max(int num1, int num2)
{
return num1 > num2 ? num1 : num2;
}
int max_sum(int* array, int n)
{
assert(array != NULL);
int max_sofar = array[0];
int max_until = array[0];
for(int i = 1; i < n; i++)
{
if(max_until > 0)
{
max_until += array[i];
}
else
{
max_until = array[i];
}
max_sofar = max(max_sofar, max_until);
}
return max