diff --git a/src/main/java/com/thealgorithms/others/MaximumSubArraySum.java b/src/main/java/com/thealgorithms/others/MaximumSubArraySum.java new file mode 100644 index 000000000000..0463c80d0c32 --- /dev/null +++ b/src/main/java/com/thealgorithms/others/MaximumSubArraySum.java @@ -0,0 +1,47 @@ +package others; + +public class MaximumSubArraySum { + //Maximum Subarray Sum using Divide and Conquer algorithm + + + public static int MaximumSum(int[] Arr, int firstindex, int lastindex) { + + if (lastindex == firstindex) {//if the first index and the last index of array are same + return Arr[ firstindex ];//it means array contains only one element + //and this element equals maximum subarray sum. + } + + // Finding middle element's index of the array + int middle = ( firstindex + lastindex ) / 2; + + // Finding maximum subarray sum for the left subarray + + int leftMax = -1000000000; + int sum = 0; + for (int i = middle; i >= firstindex; i--) { + sum += Arr[ i ];//addition for sum + if (sum > leftMax) { + leftMax = sum; + } + } + + // Find maximum subarray sum for the right subarray + int rightMax = -1000000000;//should be minimum value + sum = 0; + for (int i = middle + 1; i <= lastindex; i++) { + sum += Arr[ i ];//addition for sum + if (sum > rightMax) { + rightMax = sum; + } + } + + // Recursive part + int maxLeftRight = Math.max (MaximumSum (Arr, firstindex, middle),//left part of the array + MaximumSum (Arr, middle + 1, lastindex));//right part of the array + + // return maximum of the three + return Math.max (maxLeftRight, leftMax + rightMax); + } + + +}