给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在惟一答案。数组
Input: nums = [-1,2,1,-4], 和 target = 1.指针
Output: 最接近的三数之和是2code
1.双指针法
先对目标数组进行排序,假设最开始第一个,第二个,最后一个元素之和sum最接近目标值target。若是sum=target,直接返回sum(很明显,这必定是最接近的);若是sum>target,则最后一个元素要向前推;
若是sum<target,则第二个元素要向后推。逐渐更新sum,直到循环结束。(表诉得不是很清楚,直接看代码把。)排序
双指针法three
class Solution { public int threeSumClosest(int[] nums, int target) { Arrays.sort(nums); int left=1; int right=nums.length-1; int result=nums[0]+nums[left]+nums[right]; int newresult=0; if(nums.length==3){ return nums[0]+nums[1]+nums[2]; } for(int i=0;i<nums.length-2;i++){ left=i+1; right=nums.length-1; while(left<right){ newresult=nums[i]+nums[left]+nums[right]; if(Math.abs(newresult-target)<=Math.abs(result-target)){ result=newresult; } if(result==target){ return result; } else if(newresult<target){ left++; } else{ right--; } } } return result; } }