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);