[前端刷题][Javascript]求数组任意三个数的和,并且这个和与所给数最接近[代码不对,正在改,正确见末尾链接]

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值