一、题目叙述:
iven 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).
Subscribe to see which companies asked this question
二、解题思路:
这题我看了别人的答案。。。目的是求最接近给定值的三个数的和。
(1)给数组排序
(2)第一个数循环,设置指针,分别在数组的前面和后面,计算和。比给定值大,high指针前移;小,low指针后移。每次比较差距,更新最近距离的值。
***遇到此类给定一串数之类的问题,考虑排序与设置前后指针。
三、源码:
import java.util.Arrays;
public class Solution
{
public int threeSumClosest(int[] nums, int target)
{
if (nums.length < 3) return Integer.MAX_VALUE;
int closet = nums[0] + nums[1] + nums[2];
Arrays.sort(nums);
for (int i = 0; i < nums.length - 2; i++)
{
int low = i + 1;
int high = nums.length - 1;
while (low < high)
{
int sum = nums[i] + nums[low] + nums[high];
if (Math.abs(sum - target) < Math.abs(closet - target)) closet = sum;
if (sum > target) high--;
else if (sum < target) low++;
else return target;
}
}
return closet;
}
public static void main(String args[])
{
int[] s = {-1,2,1,-4};
Solution solution = new Solution();
System.out.println(solution.threeSumClosest(s, 2));
}
}