Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.
For example, given array S = {-1 2 1 -4}, and target = 1. The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
class Solution {
public:int threeSumClosest(vector<int> &num, int t) {
int result = 0;
int remainder = INT_MAX ;
sort(num.begin(), num.end());
for(int i = 0; i < num.size(); i++)
twoSum(num, i, result, remainder, t);
return result;
}
void twoSum(vector<int> num, int targetIndex, int& result, int &remainder, int t){
int i = targetIndex + 1;
int j = num.size() - 1;
while(i < j){
int thisRemainder = num[targetIndex] + num[i] + num[j] - t;
if(abs(thisRemainder) <= remainder) {
remainder = abs(thisRemainder);
result = num[targetIndex] + num[i] + num[j];
}
if(thisRemainder > 0) j--;
else i++;
}
}
};