题目链接
https://pintia.cn/problem-sets/434/problems/5404
注:这里还以一篇讲解更全面的文章
解题代码
// C语言 C11 Clion
#include <stdio.h>
#include <limits.h>
int main(){
int N = 1;
scanf("%d", &N);
int list[100000] = {0};
for (int i = 0; i < N; ++i) {
scanf("%d", &list[i]);
}
int iToJ = 0;
// max 的初始值为 最小整数即可解决最大子类和为复数的问题
int max = INT_MIN;
int i = 0;
int j = 0;
for (i = 0; i < N; ++i) {
for (j = i; j < N; ++j) {
iToJ += list[j];
if(iToJ > max){
max = iToJ;
}
if(iToJ < 0){
i = j;
iToJ = 0;
}
}
i = j;
iToJ = 0;
}
printf("%d", max);
return 0;
}
Huber的瞎想
- 能够以
T(n)
的时间复杂度来求解全局最优解,并避免局部最优解 - 当然,这个算法解决的是一维问题,或者是能够降到一维的问题