理解思路永远是解题的第一大重点。
思路如下:
从第一项累加到最后一项相信大家都会。
但如何让它在组成最大子数组的第一个数开始累加就是这道题的关键了。大家可以仔细的思考。
其实只需用一个三目运算符(当然你也能运用其他的方法)将第N项的数与第N项前的所有数的累加和作比较即可
因为假如第N项大于第N项前的所有数的累加和,则没有必要继续累加下去的必要性了。
代码如下,愿诸君能更进一步,加油!
#include <stdio.h> int main() { long long int i,j,n,max=-9999,sum[200010]={0},a[200010]; scanf("%lld",&n); for(i=1;i<=n;i++)scanf("%lld",&a[i]); for(i=1;i<=n;i++){ sum[i]=sum[i-1]+a[i]>a[i]?sum[i-1]+a[i]:a[i]; } for(i=1;i<=n;i++) if(max<sum[i])max=sum[i]; printf("%lld",max); return 0; }