3Sum Closest
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).
与3Sum相同的思路
每一轮先固定一个数,用双指针指向数组的头和尾。
如果目前三个数的和小于target,头指针++,否则尾指针--,直到指针碰到为止,记录最接近的结果。
1 /** 2 * @param {number[]} nums 3 * @param {number} target 4 * @return {number} 5 */ 6 var threeSumClosest = function(nums, target) { 7 var min = Infinity; 8 var res = 0; 9 nums = nums.sort(sorting);10 11 for(var i = 0; i < nums.length - 2; i++){12 if(nums[i - 1] !== undefined && nums[i - 1] === nums[i]){13 continue;14 }15 var curr = nums[i];16 var m = i + 1;17 var n = nums.length - 1;18 while(m < n){19 var tmp = Math.abs(nums[m] + nums[n] + curr - target);20 if(tmp < min){21 min = tmp;22 res = nums[m] + nums[n] + curr;23 }24 25 if(nums[m] + nums[n] + curr < target){26 m++;27 } else {28 n--;29 }30 }31 }32 return res;33 34 function sorting(a, b){35 if(a > b){36 return 1;37 }else if(a < b){38 return -1;39 }else{40 return 0;41 }42 }43 };