鱼C论坛

 找回密码
 立即注册
查看: 2428|回复: 2

[已解决]两数和的最接近值

[复制链接]
发表于 2023-4-25 19:36:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目描述

输入列表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
最佳答案
2023-4-25 19:59:51
你可以使用以下Python代码实现这个功能:

  1. def two_sum_closest(nums, target):
  2.     nums.sort()
  3.     left, right = 0, len(nums) - 1
  4.     min_diff = float('inf')

  5.     while left < right:
  6.         current_sum = nums[left] + nums[right]
  7.         current_diff = abs(target - current_sum)

  8.         if current_diff < min_diff:
  9.             min_diff = current_diff

  10.         if current_sum < target:
  11.             left += 1
  12.         elif current_sum > target:
  13.             right -= 1
  14.         else:
  15.             return 0

  16.     return min_diff

  17. nums = list(map(int, input().split(',')))
  18. target = int(input())

  19. result = two_sum_closest(nums, target)
  20. print(result)
复制代码


这段代码定义了一个名为`two_sum_closest`的函数,该函数接受两个参数:一个数字列表`nums`和一个目标值`target`。首先,我们对数字列表进行排序,然后使用双指针方法遍历列表。我们计算当前指针对应的数字之和与目标值的差值,如果差值小于之前的最小差值,我们更新最小差值。根据两数之和与目标值的大小关系,我们移动左指针或右指针,直到左指针大于或等于右指针。最后返回最小差值。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-4-25 19:58:28 | 显示全部楼层
  1. def closest_sum(nums, target):
  2.     nums.sort()
  3.     left, right = 0, len(nums) - 1
  4.     ans = float('inf')
  5.     while left < right:
  6.         s = nums[left] + nums[right]
  7.         if abs(s - target) < abs(ans - target):
  8.             ans = s
  9.         if s < target:
  10.             left += 1
  11.         else:
  12.             right -= 1
  13.     return abs(target - ans)

  14. # 测试代码
  15. nums = [-1, 2, 1, -4]
  16. target = 4
  17. print(closest_sum(nums, target))
复制代码

可以使用双指针法解决本题。

首先将数组排序。然后用双指针分别指向数组的第一个元素和最后一个元素,计算这两个数字的和,并将其与 target 比较。如果和小于 target,则将左指针右移,而如果和大于 target,则将右指针左移。在这个过程中,记录所有遍历过的值中最接近 target 的那个值即可。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-25 19:59:51 | 显示全部楼层    本楼为最佳答案   
你可以使用以下Python代码实现这个功能:

  1. def two_sum_closest(nums, target):
  2.     nums.sort()
  3.     left, right = 0, len(nums) - 1
  4.     min_diff = float('inf')

  5.     while left < right:
  6.         current_sum = nums[left] + nums[right]
  7.         current_diff = abs(target - current_sum)

  8.         if current_diff < min_diff:
  9.             min_diff = current_diff

  10.         if current_sum < target:
  11.             left += 1
  12.         elif current_sum > target:
  13.             right -= 1
  14.         else:
  15.             return 0

  16.     return min_diff

  17. nums = list(map(int, input().split(',')))
  18. target = int(input())

  19. result = two_sum_closest(nums, target)
  20. print(result)
复制代码


这段代码定义了一个名为`two_sum_closest`的函数,该函数接受两个参数:一个数字列表`nums`和一个目标值`target`。首先,我们对数字列表进行排序,然后使用双指针方法遍历列表。我们计算当前指针对应的数字之和与目标值的差值,如果差值小于之前的最小差值,我们更新最小差值。根据两数之和与目标值的大小关系,我们移动左指针或右指针,直到左指针大于或等于右指针。最后返回最小差值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-25 01:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表