Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.
For example, given array S = {-1 2 1 -4}, and target = 1.
The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
//比较函数
function sortNum(a,b)
{
return a-b;
}
var threeSumClosest = function(nums, target) {
switch (nums.length)
{
case 0:
return 0;
case 1:
return nums[0];
case 2:
return nums[0]+nums[1];
default:
break;
}
var k=nums.length-1;
var arrNum=nums.sort(sortNum); //先对数组排序
var currentSum=arrNum[0]+arrNum[1]+arrNum[2]; //给定初始比较值
var closeSum=currentSum;
var diff =Math.abs(currentSum-target);
for (var i = 0; i < k-1; i++) //先固定第一个数,和最后一个数,若三个数的和大于目标值,则k减1;若小于目标值加1;j和k值相等了,则i加1,进入外层下次循环,k值一定要重置;
{
k=nums.length-1; //k要重置
for (var j = i+1; j < k;)
{
currentSum = arrNum[i] + arrNum[j] + arrNum[k];
if (currentSum === target)
{
return currentSum;
}
if (Math.abs(currentSum-target) < diff)
{
closeSum = currentSum;
diff = Math.abs(currentSum - target);
}
if (currentSum < target)
{
j++;
}
else
{
k--;
}
}
}
return closeSum;
};