给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
与上一篇博文方法类似。
class Solution { //这道题与3sum类似,可参考上一篇 public int threeSumClosest(int[] nums, int target) { int p,k,q; int len = nums.length; int res = nums[0] + nums[1] + nums[len - 1]; //先排序 Arrays.sort(nums,0,len); for(p = 0;p < len;++p){ //固定p,进行遍历 if(p - 1 >= 0 && nums[p] == nums[p - 1]) continue; q = len - 1; k = p + 1; //k,q进行夹逼 while(k < q){ int sum = nums[p] + nums[k] + nums[q]; //每回比较全局最小 if(Math.abs(sum - target) < Math.abs(res - target)){ res = sum; } sum -= target; if(sum < 0){ ++k; while(k < q && nums[k] == nums[k - 1]) ++k; }else{ if(sum > 0){ --q; while(k < q && nums[q] == nums[q + 1]) --q; }else return target; } } } return res; } }