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