输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为 O(n)。
int arr[10];
void randData(int a[], int start, int end)
{
srand(time(NULL));
for (int i = start; i <= end; ++i)
a[i] = rand() % 10-5;
printf("生成新的序列 :");
print(a, start, end);
printf("\n");
}
int maxSubarray(int a[], int size) {
if (size<=0)
perror("error array size");
int sum = 0;
int max = - (1 << 31);
int cur = 0;
while (cur < size) {
sum += a[cur++];
if (sum > max)
max = sum;
else if (sum < 0)
sum = 0;
}
return max;
}
结果如下: