16.最接近的三数之和
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
示例 |
---|
给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2). |
这一题与上一题大致思路相似,都是使用头尾双指针进行判断优化
就是有一个绝对值函数的使用:
int abs(int t);
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int res, temp, L, R;
res = INT_MAX;
sort(nums.begin(), nums.end());
for(int i=0; i<nums.size()-2; i++){
L = i+1; R = nums.size() - 1;
while(L <R){
temp = nums[i]+nums[L]+nums[R]-target;
if(temp == 0)
return target;
else if(temp > 0)
R--;
else L++;
res = abs(res)<abs(temp)? res:temp;
}
}
return res+target;
}
};
Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.