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.
For example, given array S = {-1 2 1 -4}, and target = 1.
The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
public class Solution {
public int threeSumClosest(int[] num, int target) {
// Sort array, then two pointers run closer from right and left.
int min = Integer.MAX_VALUE; // Minimum absolute difference between sum and target
int result = 0;
Arrays.sort(num);
for (int i = 0; i < num.length; i++)
{
int left = i + 1;
int right = num.length - 1;
while (left < right)
{
int sum = num[i] + num[left] + num[right];
int diff = Math.abs(sum - target);
// Find the best result (sum == target), return sum directly.
if (diff == 0)
return sum;
if (diff < min)
{
min = diff;
result = sum;
}
// If sum is small, move left pointer (change to a bigger number)
if (sum <= target)
left++;
// If sum is big, move right pointer (change to a smaller number)
else
right--;
}
}
return result;
}
}
No comments:
Post a Comment