您的位置:首页 > 其它

Leetcode16. 3Sum Closest

2016-12-25 17:14 281 查看
原题

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).


大意

给出一个数组,数组中选择3个元素,是的三者的和最接近target目标值。返回最接近target的和。

思路

和题目3sum很相似;固定第一个数,使用两个指针进行遍历,使用一个close和target和sum之间的差相比较,返回close最小的sum

代码

public class Solution {
public int threeSumClosest(int[] nums, int target) {
int ret=0;
Arrays.sort(nums);
int close=Integer.MAX_VALUE;
for(int i=0;i<nums.length-2;i++){
// if (i > 0 && nums[i] == nums[i+1]) continue;
int left=i+1;
int right=nums.length-1;
while(left<right){
int sum=nums[i]+nums[left]+nums[right];
if(target>sum){
if(target-sum<close){
close=target-sum;
ret=sum;
}
left++;
}
else if (sum>target) {
if (sum-target<close) {
close=sum-target;
ret=sum;
}
right--;
}
else return sum;
}

}
return ret;
}
}


3sum的思路类似,首先固定一个,然后使用两个指针来遍历其他的元素。

[原题链接](https://leetcode.com/problems/3sum-closest/)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode