Kadane算法是一种非常适合用来求最大序列和的算法,其核心思想就是判断当前的序列和与当前元素之间的大小关系:
- 如果是序列和大,则存储当前序列和;
- 若当前元素大,则认为取当前元素即为最大,将当前序列和设为当前元素的值;
如此遍历完所有元素即可获得最大元素和,Kadane算法的时间复杂度为 O(n)。
C语言实现代码如下:
#include <stdio.h> long long get_max_seq_sum(long long *seq, int n) { long long cur_sum = seq[0]; long long max_sum = seq[0]; for (int i=1; i<n; ++i) { cur_sum = (seq[i] > cur_sum + seq[i]) ? seq[i] : (seq[i] + cur_sum); max_sum = max_sum > cur_sum ? max_sum : cur_sum; } return max_sum; } int main() { int a; long long seq[1000000]; while (scanf("%d", &a) != EOF) { // 注意 while 处理多个 case // 64 位输出请用 printf("%lld") to for (int i=0; i<a; ++i) { scanf("%lld", &seq[i]); } printf("%lld\n", get_max_seq_sum(seq, a)); } return 0; }