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).java
給定包含n個整數數組S,找到S中的三個整數,從而使之和最接近給定的數。返回三個整數的總和。你能夠假設每一個輸入將有一個確切的解決。數組
和3sum相似求解,參見【【013-3 Sum(三個數的和)】】spa
import java.util.Arrays; public class Solution { public int threeSumClosest(int[] nums, int target) { // 記錄最小的差值 long minDiff = Long.MAX_VALUE; // 記錄最小差值對應的三個整數和 long result = 0; // 每次求得的差值 long diff; // 每次求得的三個整數的和 long sum; // 先對數組進行排序 Arrays.sort(nums); // i表示假設取第i個數做爲結果 for (int i = 0; i < nums.length - 2; i++) { // 第二個數可能的起始位置 int j = i + 1; // 第三個數多是結束位置 int k = nums.length - 1; while (j < k) { // 求當前三個數的和 sum = nums[j] + nums[k] + nums[i]; // 當前和與目標和之間的差值 diff = Math.abs(target - sum); // 差值爲0就直接返回 if (diff == 0) { return (int) sum; } // 若是當前的差值比以前記錄的差值小 if (diff < minDiff) { // 更新最小的差值 minDiff = diff; // 更新最小差值對應的和 result = sum; // 以上的設置在下一次元素處理時生效 } // 和大於target if (sum > target) { k--; } // 和小於target else { j++; } } } return (int) result; } }