繁体   English   中英

返回不正确值的目标 K function 的最接近总和

[英]Closest Sum to target K function returning incorrect values

请参阅下面的 function,我遇到的问题是在运行我的测试代码时,我期望使用 [69, 82] 的数组,因为 69+82 是 151,但反而低于 150,因此在数组中获得 79 和 69。 对于第二个测试,而不是 [12, 91, 47] 因为 12+91+47 是 150,但我的 function 返回一个较低且不正确的 [99, 47]。 我怎样才能解决这个问题? 我愿意接受更好的方法来实现这个 function。

def closestSum(arr, k):
    #create a dp dictionary to grow. key is closest sum so far, value is the list of numbers that add up to key
    dp_dict = {0:[]}

    for num in arr:
        dict_copy = dict(dp_dict)
        # grow or update the dp dict with the closest sum so far
        for sum in dp_dict:
            if sum + num < k:
                dict_copy[sum+num] = dp_dict[sum]+[num]
        dp_dict = dict_copy

    #traceback - find the item in dp dict that is closest to k
    result = (k,[])
    for sum, number_list in dp_dict.items():
        distance = abs(k - sum)
        if distance < result[0]:
            result = (distance, number_list)
    return result[1]

# should return [69, 82]
print(closestSum([15, 79, 99, 6, 69, 82, 32], 150))

# should return [12, 91, 47]
print(closestSum([12, 79, 99, 91, 81, 47], 150))

if sum + num < k:拒绝大于 k 的总和。 您应该将其替换为if sum < k: 您想在添加数字之前检查您的总和是否大于 k。 如果 sum >= k,那么显然添加 num 会使它远离 k。 此外,不应使用sum作为变量名,因为它是内置的 function。 您可能希望将此问题移至 Code Review,以获取有关如何使 function 变得更好的更多反馈。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM