要求不使用 itertools 模块中的 combinations 函数
前贴曾求过类似代码:https://www.52pojie.cn/thread-1749088-1-1.html
然而最完美的方法都是用的 itertools 模块中的 combinations 函数,这个函数有个缺点,当数组数量超过几十个甚至上百个以后,计算速度漫长到我看不到结果。。。
要求和上次稍微变更一点点:
就是有个数组,都是数字整数,
求其中哪几个数字相加之后在某个区间即可,不用匹配最接近。
[color=]例子:
这里有数组[1,2,3,3,4,4,6](数组中有可能有数字重复)数组长度可能会上1000
目标范围(9-11)
输出数组[1,2,3,3] 或者[2,3,6]或者[3,4,4] 等等等都可以
只需要输出1组数字即可,最少1个数字,多了没有上限(如果算法耗时过长,上限可设置最多4个)
要求不使用 itertools 模块中的 combinations 函数或者耗时特别长的函数。
参考问题代码:我不明白为啥这个for i 的循环2轮就循环完了,
[color=]#不知道为啥输出是(2,4,0)而不是(4,4,0)
有兴趣的大佬教教我为啥
[color=]def
[color=]calculate
(arr
[color=],
target):
#
首先初始化最小绝对值为
target
min_diff = target
#
用来保存数字对
result_pair = None
[color=]
#
找到那对加和最接近
target
[color=]for
i
[color=]in
arr:
arr1 = arr
arr1.remove(i)
[color=]for
j
[color=]in
arr1:
arr2 = arr1
arr2.remove(j)
[color=]for
k
[color=]in
arr2:
[color=]if
i + j +k 8
[color=]print
(calculate(arr
[color=],
target))
#不知道为啥输出是(2,4,0)而不是(4,4,0)