您的位置:首页 > 其它

[leetcode]16. 3Sum Closest

2016-10-17 22:34 435 查看
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).

此题是15题的变种,这次是求相加之和与target最接近的三个数。解法和上一题一样,只不过这次只需要求出和target最接近的和。上一题用了递归,对三个数来说,用两层循环也可以解决。这道题我们就用和上一题不一样的写法。
java代码

public class Solution {
public int threeSumClosest(int[] nums, int target) {
if(nums==null||nums.length<3){
return 0;
}
Arrays.sort(nums);
int start,end;
int diff=Integer.MAX_VALUE;
int result=0;
for(int i=0;i<nums.length-2;i++){
start=i+1;
end=nums.length-1;
int tmp;
while(end>start){
int sum = nums[i]+nums[start]+nums[end];
if(target>sum){
start++;
if(target-sum<diff){
diff=target-sum;
result=sum;
}
}else if(target<sum){
end--;
if(sum-target<diff){
diff=sum-target;
result=sum;
}
}else{
return sum;
}

}
}
return result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: