diff --git a/53_maximum_subarray/main.cpp b/53_maximum_subarray/main.cpp new file mode 100644 index 0000000..fdc1177 --- /dev/null +++ b/53_maximum_subarray/main.cpp @@ -0,0 +1,32 @@ +#include +using namespace std; + +class Solution { + public: + int maxSubArray(vector& nums) { + return maxSubArray(nums, 0, nums.size() - 1); + } + + int maxSubArray(vector& nums, int leftIndex, int rightIndex) { + if (leftIndex > rightIndex) return INT32_MIN; + + int mid = (leftIndex + rightIndex) / 2; + int leftMaxSum = 0, rightMaxSum = 0; + + // left half side sum + for (int i = mid - 1, currentSum = 0; i >= leftIndex; i--) { + currentSum += nums[i]; + leftMaxSum = max(leftMaxSum, currentSum); + } + + // right half side sum + for (int i = mid + 1, currentSum = 0; i <= rightIndex; i++) { + currentSum += nums[i]; + rightMaxSum = max(rightMaxSum, currentSum); + } + + return max(max(maxSubArray(nums, leftIndex, mid - 1), + maxSubArray(nums, mid + 1, rightIndex)), + leftMaxSum + nums[mid] + rightMaxSum); + } +};