UNPKG

typescript-algorithms-and-datastructures

Version:
55 lines 2.23 kB
(function (factory) { if (typeof module === "object" && typeof module.exports === "object") { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === "function" && define.amd) { define(["require", "exports"], factory); } })(function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function FindMaximumSubarray(array, left = 0, right = array.length) { if (left === right) { return [left, right, left > array.length ? -Infinity : array[left]]; } else { const middle = Math.floor((left + right) / 2); const [leftLow, leftHigh, leftSum] = FindMaximumSubarray(array, left, middle); const [rightLow, rightHigh, rightSum] = FindMaximumSubarray(array, middle + 1, right); const [crossLow, crossHigh, crossSum] = FindMaximumCrossingSubarray(array, left, middle, right); if (leftSum >= rightSum && leftSum >= crossSum) { return [leftLow, leftHigh, leftSum]; } if (rightSum >= leftSum && rightSum >= crossSum) { return [rightLow, rightHigh, rightSum]; } return [crossLow, crossHigh, crossSum]; } } function FindMaximumCrossingSubarray(array, left, middle, right) { let leftSum = -Infinity; let rightSum = -Infinity; let sum = 0; let maxLeft = middle; let maxRight = Math.min(middle + 1, array.length - 1); for (let i = middle; i >= left; i--) { sum = sum + array[i]; if (sum > leftSum) { leftSum = sum; maxLeft = i; } } sum = 0; for (let i = middle + 1; i < right; i++) { sum = sum + array[i]; if (sum > rightSum) { rightSum = sum; maxRight = i; } } return [maxLeft, maxRight, Math.max(rightSum, 0) + Math.max(leftSum, 0)]; } exports.default = FindMaximumSubarray; }); //# sourceMappingURL=FindMaximumSubarray.js.map