类似于3sum,每组数多了一个比较判断的过程。这段代码中少了去重复的一步
public class Solution {
public void sort(int[] nums) {int temp;
for (int i = 1; i < nums.length; ++i)
{
temp = nums[i];
int j;
for (j = i; j > 0 && temp < nums[j - 1]; --j)
{
nums[j] = nums[j - 1];
}
nums[j] = temp;
}
}
public int threeSumClosest(int[] nums, int target) {
sort(nums);
int sum,distance,theNum,minDistance;
sum=nums[0]+nums[1]+nums[nums.length-1];
theNum=sum;
minDistance=Math.abs(target-sum);
distance=minDistance;
for(int i=0;i<nums.length;i++){
int p,q;
p=i+1;
q=nums.length-1;
while (p<q) {
// while (p<q&&nums[p+1] == nums[p])
// {
// p++;
// //do nothing
// }
// while ( p<q&&nums[q-1] == nums[q])
// {
// q--;
// //do noghing
// }
sum=nums[i]+nums[p]+nums[q];
if(sum==target) return target;
else {
if(sum<target){
distance=target-sum;
p++;
}
else {
distance=sum-target;
q--;
}
}
if(distance<minDistance)
{
theNum=sum;
minDistance=distance;
}
}
}
return theNum;
}
}