题目:
Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.
For example, given array S = {-1 2 1 -4}, and target = 1.
The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
思路:
和3sum一样,排序之后,先确定第一个元素,然后对余下元素进行两边夹。
packagesum;importjava.util.Arrays;publicclassThreeSumClosest {publicintthreeSumClosest(int[] nums,inttarget) {intlen =nums.length;
Arrays.sort(nums);intdelta = nums[0] + nums[1] + nums[2] -target;for(inti = 0; i < len - 2;) {intl = i + 1;intr = len - 1;while(l <r) {inttmp = nums[i] + nums[l] + nums[r] -target;if(Math.abs(tmp) <Math.abs(delta))
delta=tmp;if(tmp == 0)returntarget;if(tmp < 0)++l;else--r;
}do{ ++i; }while(i < len && nums[i] == nums[i - 1]);
}returntarget +delta;
}publicstaticvoidmain(String[] args) {//TODO Auto-generated method stubint[] nums = { -1, 2, 1, -4};inttarget = 1;
ThreeSumClosest t=newThreeSumClosest();
System.out.PRintln(t.threeSumClosest(nums, target));
}
}