128 - 16 最接近的三数之和
题目
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
解答
感觉就是,排序,双指针,然后记录一下与目标绝对值差距最小的答案。
var threeSumClosest = function(nums, target) {
nums.sort((a, b) => a - b)
let ans = nums[0] + nums[1] + nums[2]
for (let i = 0; i < nums.length - 2; i++) {
let start = i + 1,
end = nums.length - 1
while (start < end) {
const sum = nums[start] + nums[end] + nums[i]
if (Math.abs(sum - target) < Math.abs(ans - target)) {
ans = sum
}
if (target > sum) {
start++
} else if (target < sum) {
end--
} else {
return ans
}
}
}
return ans
};Runtime: 68 ms, faster than 67.42% of JavaScript online submissions for 3Sum Closest.
Memory Usage: 35.1 MB, less than 100.00% of JavaScript online submissions for 3Sum Closest.
根据这个优化,前两个还可以,最后一个总感觉没那么巧。。
但总感觉,这都是小概率事件。。
Runtime: 48 ms, faster than 100.00% of JavaScript online submissions for 3Sum Closest.
Memory Usage: 35.7 MB, less than 100.00% of JavaScript online submissions for 3Sum Closest.
Runtime: 4 ms, faster than 95.54% of Go online submissions for 3Sum Closest.
Memory Usage: 2.7 MB, less than 66.67% of Go online submissions for 3Sum Closest.
Runtime: 144 ms, faster than 52.05% of Python3 online submissions for 3Sum Closest.
Memory Usage: 13.7 MB, less than 5.41% of Python3 online submissions for 3Sum Closest.
Last updated
Was this helpful?