Maximum sum of two subarrays in an array
Find two sub-arrays in an array and find the maximum sum (the sub-arrays do not overlap and are not empty)
algorithm:
- Set the variable cur,max cur=max=arr[0]
- Cur <0 à cur = 0 cur + = arr [i] max = Math.max
- Apply the above, traverse arr from left and right to get L, R array L[i]/R[i] represents the maximum sum of sub-arrays starting from left (right) to the current position
- Find the largest L[i]+R[i+1]
public int getFromTwoArray(int[] arr){ int[] L = new int[arr.length]; int[] R = new int[arr.length]; int max; L = this.getFromArray(arr); R = this.getFromArray(arr, "right"); max = L[0] + R[1]; for(int i=1;i<arr.length-1;i++){ max = Math.max(max, L[i]+R[i+1]); } return max; } public int[] getFromArray(int[] arr){ return this.getFromArray(arr, "left"); } public int[] getFromArray(int[] arr,String Role){ int[] maxArr = new int[arr.length]; int cur,max; if(arr.length<1){ throw new RuntimeException("null array"); } if(Role.equals("left")){ cur = arr[0]; max = cur; maxArr[0] = max; for(int i=1;i<arr.length;i++){ if(cur<0){ cur = 0; } cur += arr[i]; max = Math.max(cur, max); maxArr[i] = max; } return maxArr; }else if(Role.equals("right")){ cur = arr[arr.length-1]; max = cur; maxArr[arr.length-1] = max; for(int i=arr.length-2;i>=0;i--){ if(cur<0){ cur = 0; } cur += arr[i]; max = Math.max(cur, max); maxArr[i] = max; } return maxArr; }else{ throw new RuntimeException("error"); } }