16. 最接近的三数之和
给定一个包括 n 个整数的数组 nums
和 一个目标值 target
。找出 nums
中的三个整数,使得它们的和与 target
最接近。返回这三个数的和。假定每组输入只存在唯一答案。
示例:
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
提示:
3 <= nums.length <= 10^3
-10^3 <= nums[i] <= 10^3
-10^4 <= target <= 10^4
class Solution {
// 双指针算法的做法
public int threeSumClosest(int[] nums, int target) {
int result = 10000, tmp;
Arrays.sort(nums);
for(int fixed = 0; fixed < nums.length - 2; ++fixed){
if(fixed != 0 && nums[fixed - 1] == nums[fixed]){
continue;
}
for(int move1 = fixed + 1, move2 = nums.length - 1; move1 < move2; ++move1){
if(move1 != fixed + 1 && nums[move1 - 1] == nums[move1]){
continue;
}
while(move1 < move2){
tmp = nums[fixed] + nums[move1] + nums[move2];
if(Math.abs(target - tmp) < Math.abs(target - result)){
result = tmp;
}
if(tmp < target){
++move1;
}
if(tmp > target) {
--move2;
}
if(result == target){
return result;
}
}
if(move1 >= move2){
break;
}
}
}
return result;
}
}