给定K个整数组成的序列
本题旨在测试各种不同的算法在各种数据情况下的表现。各组测试数据特点如下:
- 数据1:与样例等价,测试基本正确性;
- 数据2:102个随机整数;
- 数据3:103个随机整数;
- 数据4:104个随机整数;
- 数据5:105个随机整数;
输入格式:
输入第1行给出正整数K(≤100000);第2行给出K个整数,其间以空格分隔。
输出格式:
输出第1行给出最大子列和。如果序列中所有整数皆为负数,则输出0。
输入样例:
10
-10 1 2 3 4 -5 -23 3 7 -21
输出样例:
15
C语言实现代码:
#include<stdio.h>
#include<stdlib.h>
int maxSubSeqSum(int arr[], int len);
int main(void) {
int i;
int len;
scanf_s("%d", &len);
int *arr;
arr = (int *)malloc(len * sizeof(int));
for (i = 0; i < len; i++) {
scanf_s("%d", &arr[i]);
}
printf("最大子列和为%d\n", maxSubSeqSum(arr, len));
return 0;
}
/**
* 在线处理算法:T(N) = O(N),也可以采用分而治之算法
*/
int maxSubSeqSum(int arr[], int len) {
int i;
int thisSum = 0, maxSum = 0;
for (i = 0; i < len; i++) {
thisSum += arr[i];
if (thisSum > maxSum) {
maxSum = thisSum;
}
else if (thisSum < 0) {
thisSum = 0; // 若当前子列和为负则舍弃
}
}
return maxSum;
}
本文介绍了一种求解最大子列和的算法实现,并通过C语言代码示例展示了如何计算给定整数序列中所有连续子列的最大和。该算法适用于不同规模的数据集,包括随机整数序列。
1087

被折叠的 条评论
为什么被折叠?



