借鉴上一题的代码写就行了,甚至比上一题简单。
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort (nums.begin(), nums.end());
int l = nums.size();
int result = nums[0] + nums[1] + nums[2];
for (int i = 0; i < l - 1; i++) {
if (i != 0 && nums[i] == nums[i - 1]) continue;
int j = i + 1;
int k = l - 1;
int flag = 0;
while (j < k) {
//if (nums[k] < target) break;
int tmp = nums[k] + nums[j] + nums[i];
//cout << tmp << endl;
if (tmp == target) {
flag = 1;
result = target;
break;
} else if (tmp < target) {
if (abs(tmp - target) < abs(result - target)) result = tmp;
while (j < k && nums[j + 1] == nums[j]) j++;
j++;
} else if (tmp > target) {
if (abs(tmp - target) < abs(result - target)) result = tmp;
while (j < k && nums[k - 1] == nums[k]) k--;
k--;
}
}
if (flag) break;
}
return result;
}
};