您的位置:首页 > 其它

Two Sum - Closest to target

2017-10-20 21:22 411 查看
Given an array 
nums
 of n integers,
find two integers in nums such that the sum is closest to a given number, target.
Return the difference between the sum of the two integers and the target.

Have you met this question in a real interview? 

Yes

Example

Given array 
nums
 = 
[-1,
2, 1, -4]
, and target = 
4
.
The minimum difference is 
1
.
(4 - (2 + 1) = 1).
java
public class Solution {
/*
* @param nums: an integer array
* @param target: An integer
* @return: the difference between the sum and the target
*/
public int twoSumClosest(int[] nums, int target) {
// write your code here
if (nums == null || nums.length < 2) {
return -1;
}
Arrays.sort(nums);
int left = 0;
int right = nums.length - 1;
int value = 0;
int ref = Integer.MAX_VALUE;
while (left < right) {
value = nums[left] + nums[right];
if (left < right && value < target) {
left++;
ref = Math.min(Math.abs(target - value),ref);
}
if (left < right && value > target) {
right--;
ref = Math.min(Math.abs(target - value), ref);
}
if (left < right && value == target) {
ref = 0;
break;
}
}
return ref;
}
}
python
class Solution:
"""
@param: nums: an integer array
@param: target: An integer
@return: the difference between the sum and the target
"""
def twoSumClosest(self, nums, target):
# write your code here
if nums is None or len(nums) < 2:
return -1
left, right = 0, len(nums) - 1
value, ref = 0, float('inf')
nums.sort()
while left < right:
value = nums[left] + nums[right]
if left < right and value < target:
left += 1
ref = min(ref, abs(value - target))
if left < right and value > target:
right -= 1
ref = min(ref, abs(value - target))
if left < right and value == target:
ref = 0
break
return ref
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: