输入格式: 输入第1行给出正整数 K (<= 100000);第2行给出K个整数,其间以空格分隔。 输出格式: 在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出0。 输入样例: 6 -2 11 -4 13 -5 -2 输出样例: 20
最大子列和的算法很多,最简单的可以用三重循环来做,不过O(N^3)的时间复杂度。。。
MOOC里陈越姥姥提到的最优算法在线搜索的时间复杂度是O(N)
下面贴出代码
#include <iostream> using namespace std; int main() { int n; cin >> n; int *a = (int*)malloc(n*sizeof(int)); for (int i = 0; i < n; i++){ cin >> a[i]; } int max = 0,sum=0; for (int i = 0; i < n; i++){ sum += a[i]; if (sum>max){ max = sum; } else if (sum < 0){ sum = 0; } } cout << max; }
时间: 2024-11-03 21:06:34