有了上一道题的经验,其实,这道题很简单。
唯一要注意的一点是赋值:
给closet赋值的时候,不应该使用Integer.MaxValue而是使用nums[0] + nums[1] + nums[nums.length - 1];
Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int closest= nums[0] + nums[1] + nums[nums.length - 1];
for (int i = 0; i < nums.length-2; i++) {
int left=i+1,right=nums.length-1;
int new_target=target-nums[i];
while (left<right){
if (nums[left]+nums[right]>new_target){
closest=Math.abs(closest-target)<=Math.abs(nums[left]+nums[right]-new_target)?
closest:nums[left]+nums[right]+nums[i];
right--;
}else {
closest=Math.abs(closest-target)<=Math.abs(nums[left]+nums[right]-new_target)?
closest:nums[left]+nums[right]+nums[i];
left++;
}
}
}
return closest;
}