题目
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).分析
与3Sum思路一致,不需要去重了。
代码
import java.util.Arrays; public class ThreeSumClosest { public int threeSumClosest(int[] num, int target) { if (num == null || num.length < 3) { return 0; } Arrays.sort(num); int N = num.length; int minResidual = Integer.MAX_VALUE; for (int i = 0; i < N - 2; ++i) { int j = i + 1; int k = N - 1; while (j < k) { int sum = num[i] + num[j] + num[k]; int residual = sum - target; if (residual == 0) { return target; } else if (residual < 0) { minResidual = Math.abs(minResidual) < -residual ? minResidual : residual; ++j; } else { minResidual = Math.abs(minResidual) < residual ? minResidual : residual; --k; } } } return target + minResidual; } }
LeetCode | 3Sum Closest,布布扣,bubuko.com
原文:http://blog.csdn.net/perfect8886/article/details/24017725