给一个包含 n 个整数的数组 S, 找到和与给定整数 target 最接近的三元组,返回这三个数的和。
样例
例1:
输入:[2,7,11,15],3
输出:20
解释:
2+7+11=20
例2:
输入:[-1,2,1,-4],1
输出:2
解释:
-1+2+1=2
挑战
O(n^2) 时间, O(1) 额外空间。
注意事项
只需要返回三元组之和,无需返回三元组本身
class Solution {
public:
/**
* @param numbers: Give an array numbers of n integer
* @param target: An integer
* @return: return the sum of the three integers, the sum closest target.
*/
int threeSumClosest(vector<int> &numbers, int target) {
// write your code here
int min=INT_MAX;
int res;
int left;
int right;
sort(numbers.begin(),numbers.end());
for (int i = 0; i < numbers.size()-2; i++) {
/* code */
left=i+1;
right=numbers.size()-1;
while(left<right)
{
int sum=numbers[i]+numbers[left]+numbers[right];
if(abs(sum-target)<min) {min=abs(sum-target);res=sum;}
if(sum<target) left++;
else if(sum>target) right--;
else if(sum==target) break;
}
}
return res;
}
};