From a393892614e8973b35540e7b548a71cd8fc91f56 Mon Sep 17 00:00:00 2001 From: Ayse-Sadioglu <77293310+Ayse-Sadioglu@users.noreply.github.com> Date: Sun, 12 Dec 2021 15:48:34 +0300 Subject: [PATCH] Add files via upload --- .../others/MaximumSubArraySum.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/main/java/com/thealgorithms/others/MaximumSubArraySum.java 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); + } + + +}