思路:通过一次遍历,对每个元素,再进行双指针遍历查找,当三数之和小则左指针右移,大则右指针左移,否则直接返回
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var threeSumClosest = function(nums, target) {
let list = nums.sort((a,b)=>a-b)
let result = list[0]+list[1]+list[2]
for(let i=0; i<list.length; i++){
let end = list.length-1
let start = i+1
let focus = list[i]
while(start<end){
let sum = focus+list[end]+list[start]
if(Math.abs(sum-target) < Math.abs(result-target)){
result = sum
}
if(sum>target) {
end--
} else if(sum<target){
start++
} else {
return result
}
}
}
return result
};
网友评论