Skip to content

Commit c4de989

Browse files
author
kwu130
committed
feat(src): add 16-threeSumClosest
1 parent d4e420a commit c4de989

1 file changed

Lines changed: 50 additions & 0 deletions

File tree

‎src/16-threeSumClosest.cpp‎

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
//
2+
// Created by 1412 on 2025/10/12.
3+
//
4+
5+
#include <bits/stdc++.h>
6+
7+
using namespace std;
8+
9+
class Solution {
10+
public:
11+
int threeSumClosest(vector<int>& nums, int target) {
12+
int res = nums[0] + nums[1] + nums[2];
13+
ranges::sort(nums);
14+
for (int i = 0; i < nums.size() - 2; i++) {
15+
if (i > 0 && nums[i] == nums[i - 1]) {
16+
continue;
17+
}
18+
int left = i + 1, right = nums.size() - 1;
19+
while (left < right) {
20+
int sum = nums[i] + nums[left] + nums[right];
21+
if (sum == target) {
22+
return sum;
23+
}
24+
if (abs(sum - target) < abs(res - target)) {
25+
res = sum;
26+
}
27+
if (sum < target) {
28+
left++;
29+
} else {
30+
right--;
31+
}
32+
}
33+
}
34+
35+
return res;
36+
}
37+
};
38+
39+
void test() {
40+
Solution s;
41+
vector<int> nums = {-1, 2, 1, -4};
42+
assert(s.threeSumClosest(nums, 1) == 2);
43+
nums = {0, 0, 0};
44+
assert(s.threeSumClosest(nums, 1) == 0);
45+
}
46+
47+
int main() {
48+
test();
49+
return 0;
50+
}

0 commit comments

Comments
 (0)