动态规划法:
首先给一个任意的序列来说明这个问题
1 2 3 -1 -5 4 5 8
- 首先设一个dp数组,dp[i]表示前i个区间的最大子段和
- 如果dp[i-1] > 0,那么dp[i] = dp[i-1] + a[i]
- 否则dp[i] = a[i]
int max = 0; int b[n+1]; int start = 0; int end = 0; memset(b,0,n+1); for(int i = 1; i <= n; ++i) { if(b[i-1]>0) { b[i] = b[i-1]+a[i]; }else{ b[i] = a[i]; } if(b[i]>max) max = b[i]; }