在3Sum思路的基础上衍生。。
但因为不需要返回单个值,只要一个sum,所以不需要helper function,主要的判断条件是用diff来判断的,用于结果的更新,注意 diff 和 sum是成对的,两者同步更新,diff是状态判断值,sum是目标值。
同时,左右两个index的移动还是按照newSum与target 大小的比较来移动的。当然如果两者 ==,那就直接return了
代码效率50%:
public class Solution {
public int threeSumClosest(int[] nums, int target) {
int len=nums.length;
Arrays.sort(nums);
int min=nums[0]+nums[1]+nums[2], max=nums[len-3]+nums[len-2]+nums[len-1];
if(target>=max) return max;
if(target<=min) return min;
int sum=nums[0]+nums[1]+nums[len-1];
int diff=Math.abs(sum-target);
for(int i=0; i<len-2; ++i){
int left=i+1;
int right=len-1;
while(left<right){
int newSum=nums[i]+nums[left]+nums[right];
if(newSum==target) return target;
int newDiff=Math.abs(newSum-target);
if(newDiff<diff){
diff=newDiff;
sum=nums[i]+nums[left]+nums[right];
}
if(newSum<target) left++;
else right--;
}
}
return sum;
}
}