Question:
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).Solution:
public class Solution {
public int threeSumClosest(int[] nums, int target) {
int len=nums.length;
int j,k;
Arrays.sort(nums);
int ans1=nums[len-3]+nums[len-2]+nums[len-1];
int ans2=nums[0]+nums[1]+nums[2];
int ans=0;
int min;
if(ans1-ans2!=0)
min=ans1-ans2;
else
min=ans1;
for(int i=0;i<=len-3;i++)
{
j=i+1;
k=len-1;
while(j<k)
{
int sum=nums[i]+nums[j]+nums[k];
if(sum==target)
{
return target;
}
else if(sum>target)
{
int tmp=min;
min=sum-target>min?min:sum-target;
if(tmp!=min)
ans1=sum;
k--;
while(j<k&&nums[k]==nums[k+1]) k--;
}
else if(sum<target)
{
int tmp=min;
min=target-sum>min?min:target-sum;
if(tmp!=min)
ans2=sum;
j++;
while(j<k&&nums[j]==nums[j-1]) j++;
}
}
while(i<=len-3&&nums[i]==nums[i+1]) i++;
}
ans=(Math.abs(ans1-target)>Math.abs(ans2-target))?ans2:ans1;
return ans;
}
}
和15题类似~ 但是赋初值的时候要小心~,因为这个调试了半天