您的位置:首页 > 其它

16. 3Sum Closest

2017-10-20 21:56 363 查看
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).


java

class Solution {
public int threeSumClosest(int[] nums, int target) {
if (nums == null || nums.length < 3) {
return 0;
}
Arrays.sort(nums);
int diff = 0;
int ref = Integer.MAX_VALUE;
for (int i = 0; i < nums.length - 2; i++) {
int temp = util(nums, i + 1, nums[i], target);
if (ref > Math.abs(temp - target)) {
ref = Math.abs(temp - target);
diff = temp;
}
}
return diff;
}
private int util(int[] nums, int start, int val, int target) {
int left = start;
int right = nums.length - 1;
int diff = 0;
int ref = Integer.MAX_VALUE;
int value = 0;
while (left < right) {
value = val + nums[left] + nums[right];
if (left < right && value < target) {
left++;
if (ref > Math.abs(value - target)) {
ref = Math.abs(value - target);
diff = value;
}
}
if (left < right && value > target) {
right--;
if (ref > Math.abs(value - target)) {
ref = Math.abs(value - target);
diff = value;
}
}
if (left < right && value == target) {
diff = value;
break;
}
}
return diff;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: