思路:采用双指针left和right分别指向当前下标i的右侧区间的最左和最右,计算sum=nums[i]+nums[left]+nums[right]三数之和,和target比较,移动左右结点,取相差最小的sum作为结果返回。
思路和三数之和 一样
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int ans = nums[0] + nums[1] + nums[2];
for(int i=0;i<nums.length;i++) {
int start = i+1, end = nums.length - 1;
while(start < end) {
int sum = nums[start] + nums[end] + nums[i];
if(Math.abs(target - sum) < Math.abs(target - ans))
ans = sum;
if(sum > target)
end--;
else if(sum < target)
start++;
else
return ans;
}
}
return ans;
}