fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. class Main
  8. {
  9. public static void main (String[] args) throws java.lang.Exception
  10. {
  11. int n = 6;
  12. int[] nums = {2, 1, -4, 9, 2, -1};
  13.  
  14. System.out.println("Maximum sum of two non-overlapping subarrays: " + maxTwoNonOverlappingSubarraysSum(nums));
  15. }
  16.  
  17. public static int maxTwoNonOverlappingSubarraysSum(int[] arr){
  18. int n = arr.length;
  19. int[] prefixMaxSum = calculatePrefixMaxSum(arr);
  20. int[] suffixMaxSum = calculateSuffixMaxSum(arr);
  21. int max = 0;
  22. for(int i = 0 ; i < n - 1 ; i++){
  23. max = Math.max(max , prefixMaxSum[i] + suffixMaxSum[i + 1]);
  24. }
  25. return max;
  26. }
  27.  
  28. public static int[] calculatePrefixMaxSum(int[] arr){
  29. int n = arr.length;
  30. int[] ans = new int[n];
  31. int curMax = 0 , max = 0;
  32. for(int i = 0 ; i < n ; i++){
  33. curMax = Math.max(arr[i] + curMax , Math.max(arr[i] , 0));
  34. max = Math.max(max , curMax);
  35. ans[i] = max;
  36. }
  37. return ans;
  38. }
  39.  
  40. public static int[] calculateSuffixMaxSum(int[] arr){
  41. int n = arr.length;
  42. int[] ans = new int[n];
  43. int curMax = 0 , max = 0;
  44. for(int i = n - 1 ; i >= 0 ; i--){
  45. curMax = Math.max(arr[i] + curMax , Math.max(arr[i] , 0));
  46. max = Math.max(max , curMax);
  47. ans[i] = max;
  48. }
  49. return ans;
  50. }
  51. }
  52.  
Success #stdin #stdout 0.11s 55600KB
stdin
Standard input is empty
stdout
Maximum sum of two non-overlapping subarrays: 14