Leecode 16
思路:固定一个,再运用双指针。
先固定第一个,然后运用双指针,一个变量记录最小差值,一个记录三个最近值得和,如果差值为0直接返回,否者返回最近得值。
代码:
int Leecode16_threeSumClosest(std::vector<int>& nums, int target) {
int result = INT_MAX;
int last_closet = INT_MAX;
int len = nums.size();
if (len < 3) return result;
std::sort(nums.begin(), nums.end());
for (int i = 0; i < len; i++) {
int L = i + 1;
int R = len - 1;
while (L < R) {
int sum = nums[i] + nums[L] + nums[R] - target;
if (sum == 0)
return target;
if (std::abs(sum) < std::abs(last_closet)) {
result = nums[i] + nums[L] + nums[R];
last_closet = sum;
}
if (sum < 0) L++;
else if (sum > 0) R--;
}
}
return result;
}