两数和的最接近值
题目描述输入列表nums和目标值target,在列表中找到两个数字,使得它们的和最接近目标值,输出目标值与两数之和的差。
例如,nums=[-1,2,1,-4], target=4,输出1,因为4-(2+1)=1,所以最小的差距是1。
输入
列表nums,目标值target
输出
目标值与两数之和的差
输入样例1 -1,2,1,-4
4
输出样例1
1
def closest_sum(nums, target):
nums.sort()
left, right = 0, len(nums) - 1
ans = float('inf')
while left < right:
s = nums + nums
if abs(s - target) < abs(ans - target):
ans = s
if s < target:
left += 1
else:
right -= 1
return abs(target - ans)
# 测试代码
nums = [-1, 2, 1, -4]
target = 4
print(closest_sum(nums, target))
可以使用双指针法解决本题。
首先将数组排序。然后用双指针分别指向数组的第一个元素和最后一个元素,计算这两个数字的和,并将其与 target 比较。如果和小于 target,则将左指针右移,而如果和大于 target,则将右指针左移。在这个过程中,记录所有遍历过的值中最接近 target 的那个值即可。 你可以使用以下Python代码实现这个功能:
def two_sum_closest(nums, target):
nums.sort()
left, right = 0, len(nums) - 1
min_diff = float('inf')
while left < right:
current_sum = nums + nums
current_diff = abs(target - current_sum)
if current_diff < min_diff:
min_diff = current_diff
if current_sum < target:
left += 1
elif current_sum > target:
right -= 1
else:
return 0
return min_diff
nums = list(map(int, input().split(',')))
target = int(input())
result = two_sum_closest(nums, target)
print(result)
这段代码定义了一个名为`two_sum_closest`的函数,该函数接受两个参数:一个数字列表`nums`和一个目标值`target`。首先,我们对数字列表进行排序,然后使用双指针方法遍历列表。我们计算当前指针对应的数字之和与目标值的差值,如果差值小于之前的最小差值,我们更新最小差值。根据两数之和与目标值的大小关系,我们移动左指针或右指针,直到左指针大于或等于右指针。最后返回最小差值。
页:
[1]