1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class Solution: def threeSumClosest(self, nums: List[int], target: int) -> int: nums.sort() n, d, res = len(nums), float('inf'), 0 for i in range(n): if i > 0 and nums[i - 1] == nums[i]: continue l, r, t = i + 1, n - 1, target - nums[i] while l < r: s = nums[l] + nums[r] if abs(s - t) < d: d, res = abs(s - t), s + nums[i] if s < t: l += 1 while l < r and nums[l - 1] == nums[l]: l += 1 elif s > t: r -= 1 while l < r and nums[r] == nums[r + 1]: r -= 1 else: return res return res
|