From c6b057a7b15132f006561a6fe6e52707f87d6a73 Mon Sep 17 00:00:00 2001 From: Adam Foflonker <87928802+DnA-IntRicate@users.noreply.github.com> Date: Fri, 22 May 2026 11:37:10 +0200 Subject: [PATCH 1/2] Python solution --- 16. 3Sum Closest/solution.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 16. 3Sum Closest/solution.py diff --git a/16. 3Sum Closest/solution.py b/16. 3Sum Closest/solution.py new file mode 100644 index 0000000..99725aa --- /dev/null +++ b/16. 3Sum Closest/solution.py @@ -0,0 +1,30 @@ +from typing import List + + +class Solution: + def threeSumClosest(self, nums: List[int], target: int) -> int: + """ + Given a list of numbers, nums + We need to find 3 integers at distinct indices in nums + Such that their sum either equals or is the closest to 'target' + """ + nums.sort() + closest = sum(nums[:3]) + + for i in range(len(nums) - 2): + left = i + 1 + right = len(nums) - 1 + + while left < right: + current_sum = nums[i] + nums[left] + nums[right] + if abs(current_sum - target) < abs(closest - target): + closest = current_sum + + if current_sum < target: + left += 1 + elif current_sum > target: + right -= 1 + else: + return current_sum + + return closest From 2a5a25fe14bf5e2c4d0de1312a0ca1efc894cb05 Mon Sep 17 00:00:00 2001 From: Adam Foflonker <87928802+DnA-IntRicate@users.noreply.github.com> Date: Fri, 22 May 2026 11:48:08 +0200 Subject: [PATCH 2/2] C solution --- 16. 3Sum Closest/solution.c | 52 +++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 16. 3Sum Closest/solution.c diff --git a/16. 3Sum Closest/solution.c b/16. 3Sum Closest/solution.c new file mode 100644 index 0000000..faa2eb2 --- /dev/null +++ b/16. 3Sum Closest/solution.c @@ -0,0 +1,52 @@ +#include + + +void insertion_sort(int arr[], int n) +{ + for (int i = 1; i < n; ++i) + { + int key = arr[i]; + int j = i - 1; + + while ((j >= 0) && (arr[j] > key)) + { + arr[j + 1] = arr[j]; + j = j - 1; + } + + arr[j + 1] = key; + } +} + +/** + * Given a list of numbers, nums + * We need to find 3 integers at distinct indices in nums + * Such that their sum either equals or is the closest to 'target' + */ +int threeSumClosest(int* nums, int numsSize, int target) +{ + insertion_sort(nums, numsSize); + int closest = nums[0] + nums[1] + nums[2]; + + for (int i = 0; i < numsSize - 2; ++i) + { + int left = i + 1; + int right = numsSize - 1; + + while (left < right) + { + int curr_sum = nums[i] + nums[left] + nums[right]; + if (abs(curr_sum - target) < abs(closest - target)) + closest = curr_sum; + + if (curr_sum < target) + left += 1; + else if (curr_sum > target) + right -= 1; + else + return curr_sum; + } + } + + return closest; +}