diff --git a/16_3sum_closest/main.cpp b/16_3sum_closest/main.cpp new file mode 100644 index 0000000..803fbd7 --- /dev/null +++ b/16_3sum_closest/main.cpp @@ -0,0 +1,38 @@ +#include +using namespace std; + +class Solution { + public: + int threeSumClosest(vector& nums, int target) { + sort(nums.begin(), nums.end()); + + int minDistance = INT32_MAX; + int result = target; + + for (int i = 0; i < nums.size() - 1; i++) { + int l = i + 1, r = nums.size() - 1; + + while (l < r) { + int sum = nums[l] + nums[r] + nums[i]; + int distance = abs(sum - target); + if (sum < target) { + if (distance < minDistance) { + minDistance = distance; + result = sum; + } + l++; + } else if (sum > target) { + if (distance < minDistance) { + minDistance = distance; + result = sum; + } + r--; + } else { + return target; + } + } + } + + return result; + } +};