python中无限数字流的目标总和

我试图找到一个目标总和可以从 Python 中的无限数字流中找到。数字是正数(数字> 0),唯一且数字不确定。我相信答案是使用动态编程或堆,但不能完全弄清楚逻辑。


关于可能的数据结构或逻辑流程的任何帮助都可以尝试。


太感谢了。


例如


    nums = [ 99,85,1,3,6,72,7,9,22,....]

    targetSum = 27


output: True

Explanation: 1+6+22 = 27(targetSum)


ABOUTYOU
浏览 115回答 3
3回答

米脂

您可以使用一个集合来跟踪到目前为止在迭代中给出的数字的所有可能总和。对于每次迭代,将当前数字添加到集合中的每个现有总和以添加到集合中,并将当前数字本身添加到集合中。True当目标和确实在集合中时返回:def has_sum(nums, targetSum):&nbsp; &nbsp; sums = set()&nbsp; &nbsp; for i in nums:&nbsp; &nbsp; &nbsp; &nbsp; sums.update([s + i for s in sums if s + i <= targetSum])&nbsp; &nbsp; &nbsp; &nbsp; if i <= targetSum:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sums.add(i)&nbsp; &nbsp; &nbsp; &nbsp; if targetSum in sums:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return True&nbsp; &nbsp; return False以便:has_sum([99, 85, 1, 3, 6, 72, 7, 9, 22], 29)返回True(因为 1 + 6 + 22 = 29),并且:has_sum([99, 85, 1, 3, 6, 72, 7, 9, 22], 27)返回False(因为您问题中的预期输出不正确)。

守着一只汪

您可以递归地尝试满足给定序列中有或没有第一个数字的目标总和,直到给定序列中没有更多数字,或者直到给定目标总和不再为正(因为您在评论中提到所有给定的数字是正数):def has_sum(nums, targetSum):&nbsp; &nbsp; if not nums or targetSum <= 0:&nbsp; &nbsp; &nbsp; &nbsp; return False&nbsp; &nbsp; first, *rest = nums&nbsp; &nbsp; return first == targetSum or has_sum(rest, targetSum - first) or has_sum(rest, targetSum)以便:has_sum([99, 85, 1, 3, 6, 72, 7, 9, 22], 29)返回True(因为 1 + 6 + 22 = 29),并且:has_sum([99, 85, 1, 3, 6, 72, 7, 9, 22], 27)返回False(因为您问题中的预期输出不正确)。编辑:为了避免在每次调用中将输入序列减去第一项复制到性能影响rest,可以使用索引改进上面的代码:def has_sum(nums, targetSum, index=0):&nbsp; &nbsp; if index == len(nums) or targetSum <= 0:&nbsp; &nbsp; &nbsp; &nbsp; return False&nbsp; &nbsp; num = nums[index]&nbsp; &nbsp; return num == targetSum or has_sum(nums, targetSum - num, index + 1) or has_sum(nums, targetSum, index + 1)

侃侃无极

我能想到的一个想法是使用紧密图。您可以执行以下操作:将小于总和的每个数字元素作为节点添加到图中每个新节点都连接到图中已经存在的每个其他节点添加到图形后,使用广度优先搜索从最低元素计算总和我认为这个过程很慢
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python