class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
if (nums.size() < 3) {
int temp = 0;
for (int i = 0; i < nums.size(); i++)
temp += nums[i];
return temp;
} else {
sort(nums.begin(), nums.end());
int ans = nums[0] + nums[1] + nums[2];
for (int i = 0; i < nums.size() - 2; i++) {
int lo = i + 1, hi = nums.size() - 1;
while (lo < hi) {
int sum = nums[i] + nums[lo] + nums[hi];
if (abs(target - sum) < abs(target - ans)) {
ans = sum;
}
if (sum > target) hi--;
if (sum == target) return target;
if (sum < target) lo++;
}
}
return ans;
}
}
};