参考网址:
https://www.codewars.com/kata/54521e9ec8e60bc4de000d6c/solutions/c
https://www.cnblogs.com/TenosDoIt/p/3698246.html
解题思路:
(1)动态规划, 数组为array,设dp[i] 是以array[i]结尾的子数组的最大和
(2)对于元素array[i+1], 它有两种选择:array[i+1]接着前面的子数组构成最大和,array[i+1]独自构成子数组
(3)dp[i+1]=max(dp[i]+array[i+1],array[i+1])
int maxSequence(const int* array, size_t n) {
if (n==0) return 0;
int begin=0,end=0;
int max_here=array[0],max_so_far=array[0];
for (int i=1;i<n;i++) {
if (max_here+array[i]>array[i]) max_here+=array[i];
else max_here = array[i],begin = i;
if (max_here>max_so_far) max_so_far = max_here,end=i;
}
//printf("%d,%d",begin,end);
return max_so_far>0?max_so_far:0;
}