Java:
class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int closest = Integer.MAX_VALUE;
int diff = Integer.MAX_VALUE;
for (int i = 0; i < nums.length - 2; i++) {
int j = i + 1;
int k = nums.length - 1;
while (j < k) {
int sum = nums[i] + nums[j] + nums[k];
if (Math.abs(sum - target) < diff) {
diff = Math.abs(sum - target);
closest = sum;
}
if (sum == target) {
return closest;
} else if (sum - target > 0) {
k--;
} else {
j++;
}
}
}
return closest;
}
}
Python:
class Solution:
def threeSumClosest(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
nums.sort()
closest = sys.maxsize
closest_sum = sys.maxsize
for i in range(len(nums) - 2):
l, r = i + 1, len(nums) - 1
while l < r:
cur_sum = nums[i] + nums[l] + nums[r]
cur = abs(cur_sum - target)
if cur == 0:
return cur_sum
if cur < closest:
closest = cur
closest_sum = cur_sum
if cur_sum - target < 0:
l += 1
else:
r -= 1
return closest_sum