JSFiddle - React, Tailwind, and code Playground
by Paco86
JavaScript
var subarraySumClosest = function(nums) {
var preSums = [0];
var map = new Map();
map.set(0, -1);
for (var i = 0; i < nums.length; i++) {
var sum = preSums[i] + nums[i];
preSums[i + 1] = sum;
if (map.has(sum)) {
return [map.get(sum) + 1, i];
} else {
map.set(sum, i);
}
}
var closest = Infinity;
var res = [];
preSums.sort((a, b) => a - b);
for (var i = 0; i < preSums.length - 1; i++) {
var diff = preSums[i + 1] - preSums[i];
if (closest > diff) {
closest = diff;
res = [map.get(preSums[i]) + 1, map.get(preSums[i + 1]) ];
}
}
return res.sort((a, b) => a - b);
};
var arr = [2, -5, 4, -6, -3] ;
/* [0, -10, -8, -5, 3] */
/* [-10, -8, -5, 0, 3] */
console.log(subarraySumClosest(arr));