<?php function findMaxCrossingSubarray(&$A, $low, $mid, $high){ $leftSum = -PHP_INT_MAX; $sum = 0; for($i = $mid; $i >= 0; $i--) { $sum = $sum + $A[$i]; if ($sum > $leftSum) { $leftSum = $sum; $maxLeft = $i; } } $rightSum = -PHP_INT_MAX; $sum = 0; for($j = $mid + 1; $j <= $high; $j++) { $sum = $sum + $A[$j]; if ($sum > $rightSum) { $rightSum = $sum; $maxRight = $j; } } return [ $maxLeft, $maxRight, $leftSum + $rightSum, ]; } function findMaximumSubarray(&$A, $low, $high) { if ($low === $high) { return [ $low, $high, $A[$low], ]; } else { $mid = floor(($low + $high) / 2); list($leftLow, $leftHigh, $leftSum) = findMaximumSubarray($A, $low, $mid); list($rightLow, $rightHigh, $rightSum) = findMaximumSubarray($A, $mid + 1, $high); list($crossLow, $crossHigh, $crossSum) = findMaxCrossingSubarray($A, $low, $mid, $high); if ($leftSum >= $rightSum && $leftSum >= $crossSum) { return [ $leftLow, $leftHigh, $leftSum, ]; } else if ($rightSum >= $leftSum && $rightSum >= $crossSum) { return [ $rightLow, $rightHigh, $rightSum, ]; } else { return [ $crossLow, $crossHigh, $crossSum, ]; } } } $A = [13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7]; print_r(findMaximumSubarray($A, 0, 15));
You have javascript disabled. You will not be able to edit any code.