Skip to content

Instantly share code, notes, and snippets.

@marcmartino
Created December 23, 2013 21:21
Show Gist options
  • Save marcmartino/8104869 to your computer and use it in GitHub Desktop.
Save marcmartino/8104869 to your computer and use it in GitHub Desktop.
Given an array of integers (positive or negative) find the sub-arry with the largest sum.
var assert = require("assert");
function largestSubArray(arr) {
var allArrayPoints = set(0, arr.length)
.reduce(commissionArrayPoints(arr), []);
return allArrayPoints.reduce(greaterComparator, allArrayPoints[0]);
}
function commissionArrayPoints(arr) {
return function (accum, num) {
return accum.concat(set(num, arr.length).reduce(createSubArrays(arr, num), []));
};
}
function createSubArrays(arr, startingNum) {
return function (accum, arrNum) {
var endingNum = startingNum + (arr.length - arrNum);
accum.push(arr.slice(startingNum, endingNum));
return accum;
};
}
function greaterComparator(largest, current) {
if (current.reduce(sum, 0) > largest.reduce(sum, 0)) {
return current;
}
return largest;
}
function sum(total, curr) {
return total + curr;
}
function set(start, end) {
//start inclusive, end exclusive
var compiledSet = [];
for (var m = start; m < end; m++) {
compiledSet.push(m);
}
return compiledSet;
}
console.log(largestSubArray([-1, 1, 0, -3, 14, 0.5]));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment