pdl666 发表于 2023-4-25 19:36:59

两数和的最接近值

题目描述

输入列表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

sfqxx_小 发表于 2023-4-25 19:58:28

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 的那个值即可。

isdkz 发表于 2023-4-25 19:59:51

你可以使用以下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]
查看完整版本: 两数和的最接近值