-
Notifications
You must be signed in to change notification settings - Fork 0
/
16.3sum-closest.cpp
49 lines (49 loc) · 1.28 KB
/
16.3sum-closest.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*
* [16] 3Sum Closest
*
* https://leetcode.com/problems/3sum-closest/description/
*
* algorithms
* Medium (31.78%)
* Total Accepted: 176.8K
* Total Submissions: 556K
* Testcase Example: '[-1,2,1,-4]\n1'
*
* Given an array nums of n integers and an integer target, find three integers
* in nums such that the sum is closest to target. Return the sum of the three
* integers. You may assume that each input would have exactly one solution.
*
* Example:
*
*
* Given array nums = [-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 n = nums.size();
int ans = INT_MAX;
int res = 0;
sort(nums.begin(), nums.end());
for (int i = 0; i < n-2; i++) {
int l = i+1, r = n-1;
while (l < r) {
if (nums[i]+nums[l]+nums[r] == target) return target;
if (nums[i]+nums[l]+nums[r]-target > -ans && nums[i]+nums[l]+nums[r]-target < ans) {
res = nums[i]+nums[l]+nums[r];
ans = nums[i]+nums[l]+nums[r]-target > 0 ? nums[i]+nums[l]+nums[r]-target : -(nums[i]+nums[l]+nums[r]-target);
}
if (nums[i]+nums[l]+nums[r]-target > 0) {
r--;
} else if (nums[i]+nums[l]+nums[r]-target < 0) {
l++;
}
}
}
return res;
}
};