16. 最接近的三数之和
- 题号:16
- 来源:LeetCode
- 难度:中等
- 标签:
数组双指针排序 - 语言:TypeScript
- 解法:1 个
- 作者:lmliheng
- 最近更新:2026-09-27
TypeScript · O(n^2) 时间 · O(1) 空间 · 更新于 2026-09-27
排序后固定一个数,双指针向 target 逼近
typescript
/**
* @difficulty medium
* @tags 数组,双指针,排序
* @time O(n^2)
* @space O(1)
* @note 排序后固定一个数,双指针向 target 逼近
* @16. 最接近的三数之和
*/
var threeSumClosest = function (nums: number[], target: number) {
nums = nums.sort((a, b) => a - b)
// 优化
if (nums[0] + nums[1] + nums[2] >= target) {
return nums[0] + nums[1] + nums[2]
}
if (nums[nums.length - 3] + nums[nums.length - 2] + nums[nums.length - 1] <= target) {
return nums[nums.length - 3] + nums[nums.length - 2] + nums[nums.length - 1]
}
let near = 100000
let res = nums[1] + nums[2] + nums[0]
for (let i = 0; i < nums.length - 2; i++) {
let j = i + 1
let k = nums.length - 1
while (j < k) {
let sum = nums[i] + nums[j] + nums[k]
if (target === sum) {
return target
}
if (near > Math.abs(target - sum)) {
near = Math.abs(target - sum)
res = sum
}
if (sum > target) {
k--
} else {
j++
}
}
}
return res
};源码:ts/leetcode/16. 最接近的三数之和.ts
在 GitHub 上查看题目所在目录:lmliheng/algorithm