鱼C论坛

 找回密码
 立即注册
查看: 1861|回复: 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代码实现这个功能:
def two_sum_closest(nums, target):
    nums.sort()
    left, right = 0, len(nums) - 1
    min_diff = float('inf')

    while left < right:
        current_sum = nums[left] + nums[right]
        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`。首先,我们对数字列表进行排序,然后使用双指针方法遍历列表。我们计算当前指针对应的数字之和与目标值的差值,如果差值小于之前的最小差值,我们更新最小差值。根据两数之和与目标值的大小关系,我们移动左指针或右指针,直到左指针大于或等于右指针。最后返回最小差值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[left] + nums[right]
        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 的那个值即可。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[left] + nums[right]
        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`。首先,我们对数字列表进行排序,然后使用双指针方法遍历列表。我们计算当前指针对应的数字之和与目标值的差值,如果差值小于之前的最小差值,我们更新最小差值。根据两数之和与目标值的大小关系,我们移动左指针或右指针,直到左指针大于或等于右指针。最后返回最小差值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 13:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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