class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
//vector<vector<int>> re;
int re;
//only one solution && there must be one solution
//if (size(nums) < 3) {
// re = nums[0] + nums[1] + nums[2];
// return re;
//}
if (size(nums) == 3) {
//if (nums[0] + nums[1] + nums[2] == 0)
re = nums[0] + nums[1] + nums[2];
return re;
}
sort(nums.begin(), nums.end());
int tail = size(nums) - 1;
//if (nums[0] > 0 || nums[tail] < 0) return re;
int temp_abs = abs(3 * (abs(nums[tail]) + abs(nums[0]))) + abs(target);
int temp_re = 3 * (abs(nums[tail]) + abs(nums[0]));
for (int i = 0; i < size(nums) - 2; i++) {
int t_sum = target - nums[i];
for (int l = i + 1, r = tail; l < r;) {
int t = nums[l] + nums[r] + nums[i];
if (abs(nums[l] + nums[r] + nums[i] - target) < temp_abs) {
temp_abs = abs(nums[l] + nums[r] + nums[i] - target);
temp_re = nums[l] + nums[r] + nums[i];
}
if (nums[l] + nums[r] < t_sum) { l++; }
else if (nums[l] + nums[r] > t_sum) { r--; }
else {
re = nums[l]+nums[r]+nums[i];
return re;
break;
}
}
}
re = temp_re;
return re;
}
};