From 911efbc27b36d3a3b5e923c03fade0be1d437c58 Mon Sep 17 00:00:00 2001 From: SquidSpirit Date: Wed, 19 Feb 2025 23:53:32 +0800 Subject: [PATCH] feat: 16_3sum_closest --- 16_3sum_closest/main.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 16_3sum_closest/main.cpp 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; + } +};