1031. Maximum Sum of Two Non-Overlapping Subarrays
1031. Maximum Sum of Two Non-Overlapping Subarrays
两个不重叠定长子数组的最大和,两个数组的长度已给出 两种情况,长的区间在前,短的区间在后;长的在后,短的在前
int maxSumTwoNoOverlap(vector<int>& A, int l, int m) {
int ans=0;
int n=A.size();
// 预处理使得区间的和可以快速求出
vector<int> sum(n+1, 0);
for(int i=0;i<n;++i) {
sum[i+1]=sum[i]+A[i];
}
// 固定第一个区间的位置,找第二个区间
for(int i=l-1;i+m<n;++i) {
for(int j=i+1;j<=n-m;++j) {
ans = max(ans, sum[i+1]-sum[i+1-l]+sum[j+m]-sum[j]);
}
}
swap(l, m);
for(int i=l-1;i+m<n;++i) {
for(int j=i+1;j<=n-m;++j) {
ans = max(ans, sum[i+1]-sum[i+1-l]+sum[j+m]-sum[j]);
}
}
return ans;
}#暴力 #array