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[] nums, int target) { Arrays.sort(nums); int closest = Integer.MAX_VALUE; int sumWhenClosest = 0; for (int i = 0; i < nums.length-2; i++) { int start = i+1; int end = nums.length-1; while (start < end) { int sum = nums[i]+nums[start]+nums[end]; int newClosest = Math.abs(sum-target); if (newClosest < closest) { closest = newClosest; sumWhenClosest = sum; } if (sum == target) { return target; } else if (sum < target) { start++; } else { end--; } } } return sumWhenClosest; } }
?
原文:http://hcx2013.iteye.com/blog/2214598