From b180833216fbfce3a03cb382a37bca864fa2cc3d Mon Sep 17 00:00:00 2001 From: Amandeep Singh Date: Sat, 8 Oct 2022 14:58:33 +0530 Subject: [PATCH] Solution to 3 Sum Closest-LeetCode Problem No. 16 --- threeSumClosest.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 threeSumClosest.py diff --git a/threeSumClosest.py b/threeSumClosest.py new file mode 100644 index 0000000..05e6685 --- /dev/null +++ b/threeSumClosest.py @@ -0,0 +1,30 @@ +def threeSumClosest(self, nums: List[int], target: int) -> int: + nums.sort() + l, ans, diff = len(nums), 1e18, 1e18 + for i in range(l - 2): + if i > 0 and nums[i] == nums[i - 1]: + continue + left, right = i + 1, l - 1 + while right - left > 15: + mid = (left + right) // 2 + s = nums[left] + nums[right] + nums[i] + if s == target: + break + elif s > target: + right = mid + else: + left = mid + while right - left > 1: + s = nums[left] + nums[right] + nums[i] + if s == target: + break + elif s > target: + right -= 1 + else: + left += 1 + tt = nums[i] + nums[left] + nums[right] + t = abs(target - tt) + if diff > t: + ans = tt + diff = t + return ans