以下是 JavaScript 实现代码:

function threeSumClosest(nums, target) {
  nums.sort((a, b) => a - b); // 先将数组排序
  let closestSum = nums[0] + nums[1] + nums[2]; // 初始化最接近的和
  for (let i = 0; i < nums.length - 2; i++) {
    let left = i + 1, right = nums.length - 1;
    while (left < right) {
      const sum = nums[i] + nums[left] + nums[right];
      if (Math.abs(sum - target) < Math.abs(closestSum - target)) { // 更新最接近的和
        closestSum = sum;
      }
      if (sum === target) { // 如果三个数的和刚好等于目标值,直接返回
        return target;
      } else if (sum < target) { // 如果三个数的和小于目标值,将左指针右移
        left++;
      } else { // 如果三个数的和大于目标值,将右指针左移
        right--;
      }
    }
  }
  return closestSum;
}

该算法首先对数组进行排序,然后使用双指针法遍历数组。外层循环遍历数组,内层循环使用双指针找到两个数,使得三个数的和最接近目标值。如果三个数的和刚好等于目标值,则直接返回目标值。否则,根据三个数的和与目标值的大小关系移动双指针。

这个算法的时间复杂度为 O(n^2),其中 n 为数组的长度。排序的时间复杂度为 O(nlogn),外层循环的时间复杂度为 O(n),内层循环的时间复杂度为 O(n),所以总的时间复杂度为 O(n^2)。算法的空间复杂度为 O(1),因为只使用了常数个变量来保存最接近的和和三个数的和。

JavaScript 实现三数之和最接近目标值算法

原文地址: https://www.cveoy.top/t/topic/mkZh 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录