Skip to content

Commit e9427bf

Browse files
committed
Added 3Sum Closest
1 parent 5e2c8eb commit e9427bf

File tree

4 files changed

+119
-0
lines changed

4 files changed

+119
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include <vector>
2+
#include <algorithm>
3+
#include <cstdlib>
4+
5+
class Solution {
6+
public:
7+
int threeSumClosest(std::vector<int>& nums, int target) {
8+
int n = nums.size();
9+
std::sort(nums.begin(), nums.end());
10+
int closestSum = INT_MAX;
11+
12+
for (int i = 0; i < n; i++) {
13+
if (i > 0 && nums[i] == nums[i - 1]) continue;
14+
15+
int lo = i + 1, hi = n - 1;
16+
while (lo < hi) {
17+
int curSum = nums[i] + nums[lo] + nums[hi];
18+
19+
if (std::abs(curSum - target) < std::abs(closestSum - target)) {
20+
closestSum = curSum;
21+
}
22+
23+
if (curSum == target) {
24+
return curSum;
25+
} else if (curSum < target) {
26+
lo++;
27+
} else {
28+
hi--;
29+
}
30+
}
31+
}
32+
return closestSum;
33+
}
34+
};
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import java.util.Arrays;
2+
3+
public class Solution {
4+
public int threeSumClosest(int[] nums, int target) {
5+
int n = nums.length;
6+
Arrays.sort(nums);
7+
int closestSum = Integer.MAX_VALUE;
8+
9+
for (int i = 0; i < n; i++) {
10+
if (i > 0 && nums[i] == nums[i - 1]) continue;
11+
12+
int lo = i + 1, hi = n - 1;
13+
while (lo < hi) {
14+
int curSum = nums[i] + nums[lo] + nums[hi];
15+
16+
if (Math.abs(curSum - target) < Math.abs(closestSum - target)) {
17+
closestSum = curSum;
18+
}
19+
20+
if (curSum == target) {
21+
return curSum;
22+
} else if (curSum < target) {
23+
lo++;
24+
} else {
25+
hi--;
26+
}
27+
}
28+
}
29+
return closestSum;
30+
}
31+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
var threeSumClosest = function(nums, target) {
2+
nums.sort((a, b) => a - b);
3+
let n = nums.length;
4+
let closestSum = Infinity;
5+
6+
for (let i = 0; i < n; i++) {
7+
if (i > 0 && nums[i] === nums[i - 1]) continue;
8+
9+
let lo = i + 1, hi = n - 1;
10+
while (lo < hi) {
11+
let curSum = nums[i] + nums[lo] + nums[hi];
12+
13+
if (Math.abs(curSum - target) < Math.abs(closestSum - target)) {
14+
closestSum = curSum;
15+
}
16+
17+
if (curSum === target) {
18+
return curSum;
19+
} else if (curSum < target) {
20+
lo++;
21+
} else {
22+
hi--;
23+
}
24+
}
25+
}
26+
return closestSum;
27+
};
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Solution:
2+
def threeSumClosest(self, nums: List[int], target: int) -> int:
3+
n = len(nums)
4+
nums.sort()
5+
closest_sum = float('inf')
6+
7+
for i in range(n):
8+
if i > 0 and nums[i] == nums[i-1]:
9+
continue
10+
11+
lo, hi = i + 1, n - 1
12+
while lo < hi:
13+
cur_sum = nums[i] + nums[lo] + nums[hi]
14+
15+
if abs(cur_sum - target) < abs(closest_sum - target):
16+
closest_sum = cur_sum
17+
18+
if cur_sum == target:
19+
return cur_sum
20+
elif cur_sum < target:
21+
lo += 1
22+
else:
23+
hi -= 1
24+
25+
return closest_sum
26+
# Time: O(n^2)
27+
# Space: O(n)

0 commit comments

Comments
 (0)