educative.io

Educative

Simpler solution, no weird 'or' line

  const triplet_sum_close_to_target = function (arr, target_sum) {
  let minClosestSum = Infinity
  arr.sort((a, b) => a - b)

  for (let i = 0; i < arr.length - 2; i++) {
    const baseNum = arr[i]
    let left = i + 1
    let right = arr.length - 1

    while (left < right) {
      const leftNum = arr[left]
      const rightNum = arr[right]
      const sum = baseNum + leftNum + rightNum

      if (sum === target_sum) {
        return sum
      }

      if (Math.abs(minClosestSum - target_sum) > Math.abs(sum - target_sum)) {
        minClosestSum = sum
      }

      if (sum > target_sum) {
        right -= 1
      }

      if (sum < target_sum) {
        left += 1
      }
    }
  }

  return minClosestSum
};

console.log(triplet_sum_close_to_target([-1,-1,-1,1,1], 0));
console.log(triplet_sum_close_to_target([-2, 0, 1, 2], 2));
console.log(triplet_sum_close_to_target([-3, -1, 1, 2], 1));
console.log(triplet_sum_close_to_target([1, 0, 1, 1], 100));

Hi @Nicolas_F,
Could you please share the links for the course and lesson in question.

that weird line is there for a reason checkout this thread