1. 题目描述
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
Input: nums = [-1,2,1,-4], 和 target = 1.
Output: 最接近的三数之和是2
2.思路
1.双指针法
先对目标数组进行排序,假设最开始第一个,第二个,最后一个元素之和sum最接近目标值target。如果sum=target,直接返回sum(很明显,这一定是最接近的);如果sum>target,则最后一个元素要向前推;
如果sum<target,则第二个元素要向后推。逐渐更新sum,直到循环结束。(表诉得不是很清楚,直接看代码把。)
3.题解
双指针法
class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int left=1;
int right=nums.length-1;
int result=nums[0]+nums[left]+nums[right];
int newresult=0;
if(nums.length==3){
return nums[0]+nums[1]+nums[2];
}
for(int i=0;i<nums.length-2;i++){
left=i+1;
right=nums.length-1;
while(left<right){
newresult=nums[i]+nums[left]+nums[right];
if(Math.abs(newresult-target)<=Math.abs(result-target)){
result=newresult;
}
if(result==target){
return result;
}
else if(newresult<target){
left++;
}
else{
right--;
}
}
}
return result;
}
}