题目链接:https://leetcode-cn.com/problems/3sum-closest/
总结:
- 题目类似15,但是需要求最近,同样变换等式,然后判断三个数字的和与target之间的差,如果大于target那么说明正数比较大,那么r–,反之l++,每次循环都执行这个操作
- 加油
//
// Created by zhangfeng on 2019-07-02.
//
// a + b = target - c
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
int ans;
int minDist = 9999999;
int numsLen = nums.size();
for(int i = 0; i < numsLen; i++) {
int l = 0, r = numsLen - 1;
while(l < r) {
if(l >= i || r <= i) break;
int sum = nums[l] + nums[r] + nums[i];
if(abs(sum - target) < minDist) {
minDist = abs(sum - target);
ans = sum;
}
if(sum > target) r--;
else if(sum < target) l++;
else return target;
}
}
return ans;
}
};
int main() {
Solution s;
vector<int> v;
v.push_back(-1);
v.push_back(2);
v.push_back(1);
v.push_back(4);
int ans = s.threeSumClosest(v, 1);
cout << ans << endl;
return 0;
}