class Solution {
//1. sort the sequence
//2. fix i, then increase j and decrease j accordingly
public:
int threeSumClosest(vector<int> &num, int target) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(num.size() < 3) return 0;
sort(num.begin(), num.end());
int minAbsDiff = INT_MAX;
int minSum = 0;
for (int i = 0; i < num.size()-2; ++i)
{
int j = i+1; int k = num.size()-1;
while (j < k)
{
int sum = num[i]+num[j]+num[k];
int absDiff = abs(target-sum);
if (absDiff < minAbsDiff)
{
minAbsDiff = absDiff;
minSum = sum;
}
if (sum < target)
j++;
else if (sum > target)
k--;
else return target;
}
}
return minSum;
}
};
second time
class Solution {
public:
int threeSumClosest(vector<int> &num, int target) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int closestSum = num[0]+num[1]+num[2];
sort(num.begin(), num.end());
for(int i = 0; i < num.size(); ++i)
{
int left = i+1, right = num.size()-1;
while(left < right)
{
int sum = num[i]+num[left]+num[right]-target;
if(sum > 0) right--;
else if(sum < 0) left++;
else return target;
if(abs(sum) < abs(target-closestSum)) closestSum = sum+target;
}
}
return closestSum;
}
};