源碼: example1
# -.- coding:utf-8 -.-
# 給定一個數(shù)字, 在一個任意序列的列表中找到兩個為一組的
# 數(shù)字(一組或多組)相加結果等于給定數(shù)字, 返回一組或多組.
#
# 例如:
# 列表: [1, 2, 3, 4, 5, 6, 7, 8, 9,]
# 給定一個數(shù)字: 15
# 應得出結果: (6, 9), (7, 8)
def target_sum(array, number):
sorted_array = sorted(array)
result = []
for i in sorted_array:
for j in sorted_array:
print("s")
if i + j == number:
result.append((i, j))
return result
def main():
print(target_sum([1, 2, 3, 4, 5, 6, 7, 8, 9], 15))
if __name__ == '__main__':
main()
# output:
# [(6, 9), (7, 8), (8, 7), (9, 6)]
# TODO: 結果沒問題, 但是在唯一約束列表中出現(xiàn)冗余結果, 不是特別合適
# TODO: 而且這種寫法是以二次冪的基數(shù)增長, 當列表越大時越慢!
源碼: example2
# -.- coding:utf-8 -.-
# 給定一個數(shù)字, 在一個任意序列的列表中找到兩個為一組的
# 數(shù)字(一組或多組)相加結果等于給定數(shù)字, 返回一組或多組.
#
# 例如:
# 列表: [1, 2, 3, 4, 5, 6, 7, 8, 9,]
# 給定一個數(shù)字: 15
# 應得出結果: (6, 9), (7, 8)
def target_sum(array, number):
sorted_array = sorted(array)
minimal = 0
maximum = len(sorted_array) - 1
result = []
if maximum <= 0:
return result
while minimal <= maximum:
mi = sorted_array[minimal]
ma = sorted_array[maximum]
# 這種寫法: 列表有多少個元素, 最多也就匹配多少次, 效率會高很多.
if mi + ma > number:
maximum -= 1
elif mi + ma < number:
minimal += 1
else:
result.append((mi, ma))
minimal += 1
maximum -= 1
return result
def main():
print(target_sum([1, 2, 3, 4, 5, 6, 7, 8, 9], 15))
if __name__ == '__main__':
main()
# output:
# [(6, 9), (7, 8)]