注意:从n种情况比较出极值的方法,对于初始值设定可以使用标记特殊处理第一次或者在遍历前赋一次值。
public int threeSumClosest(int[] nums, int target) {
//使用已排序好的数组+双指针可以简化问题
Arrays.parallelSort(nums);
int minDiff=0;
int retSum=0;
int count=0;
for(int i=0;i<nums.length-2;i++)
{
int l=i+1;
int r=nums.length-1;
while(l<r)
{
int sum=nums[i]+nums[l]+nums[r];
int absDiff=Math.abs(sum-target);
if(count==0)//处理第一次进入时的问题
{
count=1;
retSum=sum;
minDiff=absDiff;
}
else
{
if(sum<target)
{
l++;
}
else
{
r--;
}
if(absDiff<minDiff)
{
minDiff=absDiff;
retSum=sum;
}
}
}
}
return retSum;
}