# 016. 3Sum Closest

**<font color=red>难度: Medium</font>**

## 刷题内容

> 原题连接

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

> 内容描述

Given an array `nums` of n integers and an integer `target`, find three integers in `nums` such that the sum is closest to `target`. Return the sum of the three integers. You may assume that each input would have exactly one solution.

#### Example:
     
     Given array nums = [-1, 2, 1, -4], and target = 1.
     
     The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

## 解题方案

> 思路 
******- 时间复杂度: O(N²)******- 空间复杂度: O(N)******


代码：

```javascript
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var threeSumClosest = function(nums, target) {
    let result = Infinity;
    let len = nums.length;
    if(len <= 3){
        return nums.reduce((a,b)=>a+b,0);
    }
    nums.sort((a,b)=>a-b);
    for(let k = 0; k<len-2; k++){
        if(k>0 && nums[k-1] === nums[k]){
            continue;
        }
        let i = k + 1;
        let j = len -1;
        while(i<j){
            let count = nums[k] + nums[i] + nums[j];
            if(count === target){
                return target;
            }
            if(Math.abs(result - target) > Math.abs(count - target)){
                result = count;
            }
            if(count > target){
                j--
            }else{
                i ++
            }
        }
    }
    return result;
};
```

