题目
最接近的三数之和
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。
返回这三个数的和。
假定每组输入只存在恰好一个解。
https://leetcode.cn/problems/3sum-closest/description/
解题
暴力解法
var threeSumClosest = function(nums, target) {
let sum =nums[0]+nums[1]+nums[2];
let diffValue =Math.abs(nums[0]+nums[1]+nums[2]-target);
for(let i=0;i<nums.length-2;i++){
for(let j=i+1;j<nums.length-1;j++){
for(let k=j+1;k<nums.length;k++){
if(diffValue > Math.abs(nums[i]+nums[j]+nums[k]-target)){
diffValue = Math.abs(nums[i]+nums[j]+nums[k]-target);
sum=nums[i]+nums[j]+nums[k];
}
}
}
}
return sum;
};
2.排序+双指针(注意点:sort排序默认字符串排序)
nums.sort(function(a,b){
return a-b});
let diffValue = Math.abs(nums[0]+nums[1]+nums[2]-target);
let sum = nums[0]+nums[1]+nums[2];
for(let i=0;i<nums.length-2;i++){
let start = i+1;
let end=nums.length-1;
while(start<end){
let current = nums[i]+nums[start]+nums[end];
if(Math.abs(current-target)<diffValue){
diffValue = Math.abs(current-target);
sum=current;
}
if(current>target){
end--;
}else if(current<target){
start++;
}else{
return target;
}
}
}
return sum;