题解 | #连续子数组最大和#
连续子数组最大和
https://www.nowcoder.com/practice/1718131e719746e9a56fb29c40cc8f95
#include <iostream>
using namespace std;
const int N = 200010;
int dp[N]; //dp[i] 表示数组 1~i满足的最大值
int a[N];
int main() {
int n;
scanf("%d",&n);
for(int i = 1;i<=n;i++)
scanf("%d", &a[i]);
//连续的子序列, 连续。。。
int res = -1e9;
dp[1] = a[1];
res = dp[1];
for(int i = 2;i<=n;i++){
//只要前面 i前面的最大值》0,dp[i]肯定要加上前面的
if(dp[i-1]>0){
dp[i] = dp[i-1]+a[i];
}else{ // 没有加的必要了,就从这次从新开始
dp[i] = a[i];
}
if(dp[i]>res)
res = dp[i];
}
printf("%d", res);
return 0;
}
// 64 位输出请用 printf("%lld")
#每日一题#