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