|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 ooxx7788 于 2017-5-11 18:03 编辑
给定一个由数值组成的列表(array)和一个整数(interger),返回列表中相加之和等于整数的两个数。
列表长度最长为1000万,用时不超过12秒(好像是1.2秒,还是7秒,好烦没有给出明确时间)。
由于这个编辑器的关系,我实在没有办法正常对齐,所以你们就将就着看吧.sum_pairs([11, 3, 7, 5], 10)
# ^-^ 3 + 7 = 10
== [3, 7]
sum_pairs([4, 3, 2, 3, 4], 6)
# ^---^ 4 + 2 = 6, index: 0, 2 *
# ^---^ 3 + 3 = 6, index: 1, 3
# ^---^ 2 + 4 = 6, index: 2, 4
# * 返回整体最早出现的答案
== [4, 2]
sum_pairs([0, 0, -2, 3], 2)
# 没有可以相加成2的组合.
== None
sum_pairs([10, 5, 2, 3, 7, 5], 10)
# ^--------^ 5 + 5 = 10, index: 1, 5
# ^-^ 3 + 7 = 10, index: 3, 4 *
# * 返回整体最早出现的答案
== [3, 7]
测试代码:
先更新一些test.pydef assert_equals(func, target, *args):
if func == target:
print('Success!')
else:
print('Fail!{0} not equals {1}'.format(func, target))
print(*args)
l1 = [1, 4, 8, 7, 3, 15]
l2 = [1, -2, 3, 0, -6, 1]
l3 = [20, -13, 40]
l4 = [1, 2, 3, 4, 1, 0]
l5 = [10, 5, 2, 3, 7, 5]
l6 = [4, -2, 3, 3, 4]
l7 = [0, 2, 0]
l8 = [5, 9, 13, -3]
test.assert_equals(sum_pairs(l1, 8), [1, 7], "Basic: %s should return [1, 7] for sum = 8" % l1)
test.assert_equals(sum_pairs(l2, -6), [0, -6], "Negatives: %s should return [0, -6] for sum = -6" % l2)
test.assert_equals(sum_pairs(l3, -7), None, "No Match: %s should return None for sum = -7" % l3)
test.assert_equals(sum_pairs(l4, 2), [1, 1], "First Match From Left: %s should return [1, 1] for sum = 2 " % l4)
test.assert_equals(sum_pairs(l5, 10), [3, 7],
"First Match From Left REDUX!: %s should return [3, 7] for sum = 10 " % l5)
test.assert_equals(sum_pairs(l6, 8), [4, 4], "Duplicates: %s should return [4, 4] for sum = 8" % l6)
test.assert_equals(sum_pairs(l7, 0), [0, 0], "Zeroes: %s should return [0, 0] for sum = 0" % l7)
test.assert_equals(sum_pairs(l8, 10), [13, -3], "Subtraction: %s should return [13, -3] for sum = 10" % l8)
|
|