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. /* Name of the class has to be "Main" only if the class is public. */
  8. class Ideone
  9. {
  10. public static void main (String[] args) throws java.lang.Exception
  11. {
  12. // your code goes here
  13. int arr[] = {1,5,-3,4,-9,9,2};
  14. int n = arr.length;
  15. System.out.println("maximum sum of two non overlapping subarrays " + maxTwoOverLappingSubarrays(arr,n));
  16. }
  17. public static int maxTwoOverLappingSubarrays(int [] arr, int n){
  18. int[] prefixMaxSum = calculateMaxPrefixSum(arr,n);
  19. int[] suffixMaxSum = calculateMaxSuffixSum(arr,n);
  20.  
  21. int[] maxPrefixSum = new int[n];
  22. maxPrefixSum[0] = prefixMaxSum[0];
  23. for(int i=1;i<n;i++){
  24. maxPrefixSum[i] = Math.max(prefixMaxSum[i],maxPrefixSum[i-1]);
  25. }
  26.  
  27. int[] maxSuffixSum = new int[n];
  28. maxSuffixSum[n-1] = arr[n-1];
  29. for(int i=n-2;i>=0;i--){
  30. maxSuffixSum[i] = Math.max(suffixMaxSum[i],maxSuffixSum[i+1]);
  31. }
  32. int max = 0;
  33. for(int i=0;i<n-1;i++){
  34. max = Math.max(max,maxPrefixSum[i]+maxSuffixSum[i+1]);
  35.  
  36. }
  37. return max;
  38.  
  39. }
  40. public static int[] calculateMaxPrefixSum(int []arr, int n){
  41. int[] prefixMaxSum = new int[n];
  42. prefixMaxSum[0] = arr[0];
  43. int currentMax = arr[0];
  44. for(int i=1;i<n;i++){
  45. prefixMaxSum[i] = Math.max(0,Math.max(arr[i],arr[i]+currentMax));
  46. currentMax = prefixMaxSum[i];
  47. }
  48. return prefixMaxSum;
  49. }
  50. public static int[] calculateMaxSuffixSum(int[] arr, int n){
  51. int[] suffixMaxSum = new int[n];
  52. suffixMaxSum[n-1] = arr[n-1];
  53. int currentMax = arr[n-1];
  54. for(int i=n-2;i>=0;i--){
  55. suffixMaxSum[i] = Math.max(0,Math.max(arr[i],arr[i]+currentMax));
  56. currentMax = suffixMaxSum[i];
  57. }
  58. return suffixMaxSum;
  59. }
  60.  
  61. }
Success #stdin #stdout 0.15s 53544KB
stdin
Standard input is empty
stdout
maximum sum of two non overlapping subarrays  18