题目链接 最接近的三数之和
题目描述
给一组数据和一个target,在这组数中找到三个数,使之三数之和最接近target,并输出这三个数的和。
解题思路
这个题和 三数之和 的思路一样,也是利用双指针去做,只需对其中的代码做点改变,不同的是这里不用输出是哪三个数和所有的方案。
程序代码
c++
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(),nums.end());
int ans = nums[0] + nums[1] + nums[2];
for(int i = 0;i < nums.size();i++){
int l = i + 1;
int r = nums.size()-1;
while(l < r){
int temp = nums[i] + nums[l] + nums[r];
if(abs(target - temp) < abs(target - ans))
//这里判断一下哪个更接近
ans = temp;
if(temp == target)
return ans;
else if (temp < target)l++;
else r--;
}
}
return ans;
}
};
java
class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int result = nums[0] + nums[1] + nums[2];
for(int i=0;i<nums.length-2;i++){
int left = i+1;
int right = nums.length - 1;
while(left != right){
int sum = nums[i] + nums[left] + nums[right];
if(Math.abs(sum - target) < Math.abs(result - target))
result = sum;
if(sum > target){right--;}
else{left++;}
}
}
return result;
}
}
心得
个人觉得上面的代码还有待优化的地方,有空了再补上,最近几天有点忙。