最大連續子陣列和的實現

报错辣發表於2024-04-09

題目:最大連續子陣列和求解問題
一、背景:
問題: 給定n個整數(可能為負數)組成的序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。當所給的整數均為負數時定義子段和為0,依此定義,所求的最優值為: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n
例如,當(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)時,最大子段和為20。
——引用自《百度百科》
二、解題
程式碼如下:

include <stdio.h>

include <stdlib.h>

int main()
{
int* arr;
int N = 0, input = 0, i = 0;
int sum = 0, max = 0;
scanf_s("%d", &N);
arr = (int*)malloc(sizeof(int) * N);
int minus = 0;
//對陣列進行賦初值,並且記錄負數個數
for (i = 0; i < N; i++)
{
scanf_s("%d", &input);
arr[i] = input;
if (input < 0)
{
minus++;
}
}
//如果全為負數,直接輸出0,並結束程式
if (minus == N)
{
printf("0");
return 0;
}
//對最大子陣列進行求解
max = arr[1];
for (i = 0; i < N; i++)
{
sum = sum + arr[i];
if (sum > max)
{
max = sum;
}
if (sum < 0)
{
sum = 0;
}
}
printf("%d", max);
return 0;
}
三、測試
我使用Visual Studio進行測試。測試的部分結果如下圖。


相關文章