给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
输入:nums = [-1,2,1,-4], target = 1 输出:2 解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2)
<= nums[i] <=
<= target <=
/** * @param {number[]} nums * @param {number} target * @return {number} */ var threeSumClosest = function (nums, target) { nums = nums.sort((a, b) => a - b) let len = nums.length, left = 1, right = len - 1 || 2, _result = nums[0] + (nums[left] || 0) + (nums[right] || 0) for (let i = 0; i < len; i++) { left = i + 1 right = len - 1 while (left < right) { let sum = nums[i] + nums[left] + nums[right] sum > target ? right-- : left++ Math.abs(sum - target) <= Math.abs(_result - target) ? (_result = sum) : null } } return _result }
/** * @param {number[]} nums * @param {number} target * @return {number} */ var threeSumClosest = function (nums, target) { const len = nums.length if (len < 3) { return null } nums.sort((a, b) => a - b) let res = target - (nums[0] + nums[1] + nums[2]) for (let i = 0; i < len - 2; i++) { let left = i + 1, right = len - 1 while (left < right) { const sum = nums[i] + nums[left] + nums[right] if (sum === target) { return sum } else if (sum < target) { // left++ 与 while (nums[left] === nums[++left]) 一样 while (nums[left] === nums[++left]); } else { // right-- 与 while (nums[right] === nums[--right]) 一样 while (nums[right] === nums[--right]); } if (Math.abs(sum - target) < Math.abs(res)) { res = target - sum } } } return target - res }
本文分享自微信公众号 - 前端小书童(gaowenju_web)
原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。
原始发表时间:2020-06-24
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句