给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var threeSumClosest = function(nums, target) {
    var sort = (arr) => {
        for(var i = 0; i < arr.length - 1; i++){
            for(var j = i + 1; j < arr.length; j++){
                if(arr[i] > arr[j]){
                    var temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        return arr;
    }

    if(!nums.length || nums.length < 3){
        return 0;
    }
    var nums = sort(nums),
        minSum = nums[0] + nums[1] + nums[2],
        len = nums.length;
    for(var i = 0; i < len; i++){
        var left = i + 1,
            right = len - 1;

        while(left < right){
            var sum = nums[i] + nums[left] + nums[right];
            var diff = sum - target;
            if(Math.abs(diff) < Math.abs(minSum - target)){
                minSum = sum;
            }
            if(diff == 0){
                break;
            }else if(diff < 0){
                left++;
            }else{
                right--;
            }
        }
    }
    return minSum;
};