Total Accepted: 9118 Total Submissions: 33975
Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.
public class Solution {
// O(n^2)
public int threeSumClosest(int[] num, int target) {
Arrays.sort(num);
int closest = num[0] + num[1] + num[2];
for (int i = 0; i < num.length - 2; i++) {
int lo = i + 1;
int hi = num.length - 1;
while (lo < hi) {
int sum = num[i] + num[lo] + num[hi];
closest = Math.abs(sum - target) <
Math.abs(closest - target) ? sum : closest;
if (sum > target) hi--;
else if (sum < target) lo++;
else return target;
}
}
return closest;
}
}