SalmaYasser

maximum-sum-of-two-non-overlapping-subarrays

Nov 4th, 2019
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.03 KB | None | 0 0
  1. class Solution {
  2. public:
  3. int try_this (vector<int>& A, int L, int M)
  4. {
  5. int res = -1;
  6. int sz = A.size();
  7. vector <int> lsum (sz,0);
  8. vector <int> mxlsum(sz,0);
  9.  
  10. lsum[0] = A[0];
  11. mxlsum[0] = A[0];
  12. for (int i = 1 ; i < sz ; i ++ )
  13. {
  14. lsum[i] = lsum[i -1] + A[i] - (i >= L ? A[i-L] : 0);
  15. mxlsum[i] = max (mxlsum[i-1], lsum[i]);
  16. }
  17. vector <int> rsum (sz,0);
  18. vector <int> mxrsum (sz,0);
  19.  
  20. rsum[sz - 1] = 0;
  21. mxrsum[sz - 1] = 0;
  22.  
  23. for (int i = sz - 2 ; i >= 0 ; i--)
  24. {
  25. rsum[i] = rsum[i+1] + A[i+1] - (i+M+1 < sz ? A[i+M+1] : 0);
  26. mxrsum[i] = max (mxrsum[i+1], rsum[i]);
  27.  
  28. res = max (res,mxrsum[i] + mxlsum[i] );
  29. }
  30. return res ;
  31. }
  32.  
  33. int maxSumTwoNoOverlap(vector<int>& A, int L, int M) {
  34.  
  35. return max (try_this(A,L,M), try_this(A,M,L));
  36.  
  37.  
  38. }
  39. };
Add Comment
Please, Sign In to add comment