Maximum Sum of Two Non-Overlapping Subarrays

Maximum Sum of Two Non-Overlapping Subarrays

Two non-overlapping subarrays with fixed lengths. Both lengths are given.

We handle two cases: long interval first, short interval second; and long interval second, short interval first.

int maxSumTwoNoOverlap(vector<int>& A, int l, int m) {
    int ans=0;
    int n=A.size();
    // Preprocess so we can get range sums quickly
    vector<int> sum(n+1, 0);
    for(int i=0;i<n;++i) {
        sum[i+1]=sum[i]+A[i];
    }

    // Fix first interval position, find second interval
    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;
}

#bruteforce #array