fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6. // index 1 2 3 4 5
  7. int b[5] = {5,-3,-5,15,5};
  8. int n=5;
  9.  
  10. int maxPrefixSum[5];
  11. int maxSuffixSum[5];
  12.  
  13. // current = 0
  14. // maxPrefixSum = 0
  15. //Initially both the current and maxPrefixSum will be zero
  16. // 5 = max( 5 , 0 + 5)
  17. // current = max(b[i] , current + b[i])
  18. // 5 = max( 5 , 5 )
  19. //maxPrefixSum[i] = max(maxPrefixSum[i-1] , current)
  20.  
  21. int current = b[0];
  22. maxPrefixSum[0] = b[0];
  23. for(int i=1; i<n; i++)
  24. {
  25. current = max(b[i] , current + b[i]);
  26. maxPrefixSum[i] = max(maxPrefixSum[i-1] , current);
  27. }
  28.  
  29. // current = 0
  30. //maxSuffixSum = 0
  31. // 15 = max( 15, 0 + 15)
  32. //current = max(b[i] , current + b[i]);
  33. // 20 = max( 15+5 , 15)
  34. //maxSuffixSum[i] = max(maxSuffixSum[i+1] , current);
  35. current = b[n-1];
  36. maxSuffixSum[n-1] = b[n-1];
  37. for(int i=n-2; i>=0; i--)
  38. {
  39. current = max(b[i] , current + b[i]);
  40. maxSuffixSum[i] = max(maxSuffixSum[i+1] , current);
  41. }
  42.  
  43.  
  44. int maxSum = INT_MIN;
  45. for(int i=1; i<n-1; i++)
  46. {
  47. // 25 = max( 0 , 5 + 20)
  48. maxSum = max(maxSum , maxPrefixSum[i] + maxSuffixSum[i+1]);
  49. }
  50.  
  51. cout<<"Max sum of two nonoverlapping subarrays: "<<maxSum; // o/p -> 25
  52. }
Success #stdin #stdout 0.01s 5296KB
stdin
Standard input is empty
stdout
Max sum of two nonoverlapping subarrays: 25