题目描述:(链接)
Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.
For example, given array S = {-1 2 1 -4}, and target = 1.
The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
解题思路:
排序,左右夹逼!
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int result = 0;
if (nums.size() < 3) { return result; }
int min = INT_MAX;
sort(nums.begin(), nums.end());
auto last = nums.end();
for (auto i = nums.begin(); i != prev(last, 2); ++i) {
auto j = i + 1;
auto k = last - 1;
while (j < k) {
int sum = *i + *j + *k;
int gap = abs(sum - target);
if (gap < min) {
result = sum;
min = gap;
}
if (sum < target) {
++j ;
} else {
--k;
}
}
}
return result;
}
};