双指针
首先固定一个数,剩余两个数可以用双指针限定范围。
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
if (nums.size() == 3) {
return accumulate(nums.begin(), nums.end(), 0);
}
sort(nums.begin(), nums.end());
int res = 1e7;
for (int i = 0; i < nums.size() - 2; i++) {
int left = i + 1;
int right = nums.size() - 1;
while (left < right) {
res = update(target, res, nums[left] + nums[right] + nums[i]);
if (nums[left] + nums[right] == target - nums[i]) {
return target;
}
if (nums[left] + nums[right] > target - nums[i]) {
right--;
} else {
left++;
}
}
}
return res;
}
int update(int target, int a, int b) {
if (abs(a - target) == abs(b - target)) {
return max(a, b);
} else if (abs(a - target) < abs(b - target)) {
return a;
} else {
return b;
}
}
};