typescript-algorithms-and-datastructures
Version:
Useful algorithms and Data structures written in typescript.
55 lines • 2.23 kB
JavaScript
(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