双指针问题

三数问题

问题要求我们在数组找到最接近target的三数之和
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int len=nums.length;
int minRet=nums[1]+nums[0]+nums[2];
int dist=0,minDist=0;
for(int i=0;i<len-1;i++){
int j=i+1;
int k=len-1;
int sum=minRet;
while(j<k){
sum=nums[i]+nums[j]+nums[k];
if(sum==target){
minRet=target;
break;
}else if(sum<target){
j++;
}else{
k--;
}
}
dist=Math.abs(sum-target);
if(i==0){
minDist=dist;
}
if(dist<minDist){
minRet=sum;
minDist=dist;
}

}

return minRet;
}