3Sum Closest

MediumArrayTwo PointersSorting

Solution

export function threeSumClosest(nums: number[], target: number): number {
  const n = nums.length;
  nums.sort((a, b) => a - b);
 
  let answer = 0;
  let minDiff = Number.MAX_SAFE_INTEGER;
  for (let i = 0; i < n - 2; i++) {
    let [start, end] = [i + 1, n - 1];
    while (start < end) {
      const sum = nums[i] + nums[start] + nums[end];
      const diff = Math.abs(target - sum);
      if (diff < minDiff) {
        answer = sum;
        minDiff = diff;
      }
      if (sum === target) {
        return sum;
      }
      if (sum < target) {
        start += 1;
      } else {
        end -= 1;
      }
    }
  }
  return answer;
}