题解 | #环形数组的连续子数组最大和#
环形数组的连续子数组最大和
https://www.nowcoder.com/practice/53a9f1ba687440cc9c641c2b042a59d7
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
vector<int> a(n) ;
for(int i=0;i<n;i++)
cin>>a[i];
// vector<int> dp(2*n+1) ;
// dp[]k
int dpmin,dpmax;
dpmax= dpmin=a[0];
int mx=a[0];
int mn = 0;
int sum=mx;
for(int i=1;i<(n);i++) {
int j = a[i];
sum+=j;
dpmax = max(dpmax+j,j);
if(mx<dpmax) mx = dpmax;
}
for(int i=1;i<n-1;i++) {
int j = a[i];
dpmin = min(dpmin,0)+j;
if(mn > dpmin)
mn = dpmin;
}
cout <<max(mx,sum-mn) <<endl;
return 0;
}
算法常用解题技巧 文章被收录于专栏
算法常用解题技巧