016. 3Sum Closest
难度: Medium
刷题内容
原题连接
- https://leetcode.com/problems/3sum-closest
内容描述
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)***
代码:
/**
* @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;
};