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;};