源碼: example1
# -.- coding:utf-8 -.-
# 給定一個(gè)數(shù)字, 在一個(gè)任意序列的列表中找到兩個(gè)為一組的
# 數(shù)字(一組或多組)相加結(jié)果等于給定數(shù)字, 返回一組或多組.
#
# 例如:
# 列表: [1, 2, 3, 4, 5, 6, 7, 8, 9,]
# 給定一個(gè)數(shù)字: 15
# 應(yīng)得出結(jié)果: (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: 結(jié)果沒(méi)問(wèn)題, 但是在唯一約束列表中出現(xiàn)冗余結(jié)果, 不是特別合適
# TODO: 而且這種寫(xiě)法是以二次冪的基數(shù)增長(zhǎng), 當(dāng)列表越大時(shí)越慢!
源碼: example2
# -.- coding:utf-8 -.-
# 給定一個(gè)數(shù)字, 在一個(gè)任意序列的列表中找到兩個(gè)為一組的
# 數(shù)字(一組或多組)相加結(jié)果等于給定數(shù)字, 返回一組或多組.
#
# 例如:
# 列表: [1, 2, 3, 4, 5, 6, 7, 8, 9,]
# 給定一個(gè)數(shù)字: 15
# 應(yīng)得出結(jié)果: (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]
# 這種寫(xiě)法: 列表有多少個(gè)元素, 最多也就匹配多少次, 效率會(huì)高很多.
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)]