[LeetCode][JavaScript]3Sum Closest

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).

https://leetcode.com/problems/3sum-closest/

 

 


 

 

与3Sum相同的思路http://www.cnblogs.com/Liok3187/p/4540921.html

每一轮先固定一个数,用双指针指向数组的头和尾。

如果目前三个数的和小于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 };

 

 

 

posted @ 2015-06-29 22:48  `Liok  阅读(520)  评论(0编辑  收藏  举报