1 #include <iostream>
2 #include <vector>
3 #include<algorithm>
4 #include<cmath>
5 using namespace std;
6 class Solution {
7 public:
8 int threeSumClosest(vector<int>& nums, int target) {
9 int difference = INT_MAX;
10 sort(nums.begin(),nums.end());
11 for (int i = 1; i < nums.size()-1; i++) {
12 int left = i - 1;
13 int right = i + 1;
14 while (left>-1&&right< nums.size()) {
15 if (nums[0] + nums[right] + nums[i] > target) {
16 if (abs(difference) > nums[0] + nums[right] + nums[i] - target) {
17 difference = nums[0] + nums[right] + nums[i] - target;
18 }
19 break;
20 }
21 else if (nums[left] + nums[nums.size()-1] + nums[i] < target) {
22 if (abs(difference) > abs(nums[left] + nums[nums.size() - 1] + nums[i] - target)) {
23 difference = nums[left] + nums[nums.size() - 1] + nums[i]- target;
24 }
25 break;
26 }
27 else if (nums[left] + nums[right] + nums[i] == target|| nums[0] + nums[right] + nums[i] == target|| nums[left] + nums[nums.size() - 1] + nums[i] == target) {
28 return target;
29 }
30 else if (nums[left] + nums[right] + nums[i] > target) {
31 if (abs(difference) > nums[left] + nums[right] + nums[i] - target) {
32 difference = nums[left] + nums[right] + nums[i] - target;
33 }
34 left = left - 1;
35 }
36 else if (nums[left] + nums[right] + nums[i] < target) {
37 if (abs(difference) > abs(nums[left] + nums[right] + nums[i] - target)) {
38 difference = nums[left] + nums[right] + nums[i] - target;
39 }
40 right = right + 1;
41 }
42
43 }
44 }
45 return target+ difference;
46 }
47 };
48
49 int main() {
50 Solution sol;
51 vector<int> nums = { -1,2,1,-4 };
52 int target = 82;
53 int three=sol.threeSumClosest(nums, target);
54 cout << three << endl;
55
56 }