[英]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.