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 = [5,-3,4];
// 0, 5, 2, 6
// 0, 2, 5, 6
var res = subarraySumClosest(arr);
console.log(res);