双指针问题
三数问题
问题要求我们在数组找到最接近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; }
|