var nums=[1,2,3,4,5,6,7,8,9,10,11,-19,-33,-20];
var target=1;
var arr=new Array();
function sortNumber(a,b)
{
return a - b;
}
nums.sort(sortNumber);
console.log(nums);
var answer=function(nums,target){
var i=0;
var min=9999;
var sum=0;
while(i<nums.length){
var j=1+i;
var k=nums.length-1;
while(k>j){
if(Math.abs(nums[i]+nums[j]+nums[k]-target)<min){
min=Math.abs(nums[i]+nums[j]+nums[k]-target);
sum=nums[i]+nums[j]+nums[k];
k--;
}
else{
j++;
}
}
i++;
}
console.log(sum);
return sum;
}
answer(nums,target);
思路:1.把数组排序(从小到大),用sort()。
2.选择第一个数和两个游标,一个从第一个数后面开始,另一个从最后一个数开始。
3.在建立一个很大的变量。
4.这时已选中三个数,这个数的和与target相比,比很大的数小的话,就替代为最新的那个数。
5.比前一个数小,就往左推,找到绝对值最接近0的数,也就是最接近target的数。
在线编译链接:https://jsbin.com/lubahedavi/1/edit?js,console,output
备忘链接:https://jsbin.com/viyutajote/edit?js,console,output