Open
Description
习题
出处:LeetCode 算法第16题
给定一个包括 n 个整数的数组
nums
和 一个目标值target
。找出nums
中的三个整数,使得它们的和与target
最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
思路
还是采用双指针的方式,先将一个数固定,用双指针来遍历剩下的数。
解答
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var threeSumClosest = function (nums, target) {
nums.sort(function (a, b) {
return a - b;
});
var result = nums[0] + nums[1] + nums[2];
var sum = Math.abs(result - target);
var length = nums.length;
for (var i = 0; i < length - 2; i++) {
var leftPtr = i + 1;
var rightPtr = length - 1;
while (leftPtr < rightPtr) {
var current = nums[i] + nums[leftPtr] + nums[rightPtr];
if (Math.abs(current - target) < sum) {
sum = Math.abs(current - target);
result = current;
} else {
if (current > target) {
rightPtr--;
} else {
leftPtr++;
}
}
}
}
return result;
};
Metadata
Assignees
Labels
No labels