1,O(N^2) 双重循环:
def get_pair(input_list): # 简单双重循环,结果会有很多重复值。
for v1 in input_list:
for v2 in input_list:
if v1 + v2 == 10:
print(v1, v2)
l = [2,3,5,1,8,9,5,7,4,6,9]
get_pair(l)
-------------------------------------
def get_pair(input_list): # 为了去掉重复值,使用下标遍历list,且i < j。
for i in range(len(input_list)):
for j in range(len(input_list)):
if input_list[i] + input_list[j] == 10 and i < j:
print(input_list[i], input_list[j])
l = [2,3,5,1,8,9,5,7,4,6,9]
get_pair(l)
2,O(NlogN) 先排序再一重循环:
def get_pair(input_list):
low = 0
high = len(input_list) - 1
while low < high:
if input_list[low] + input_list[high] > 10:
high -= 1
elif input_list[low] + input_list[high] < 10:
low += 1
else:
print(input_list[low], input_list[high])
low += 1
l = [2,3,5,1,8,9,5,7,4,6,9]
l.sort()
get_pair(l)
3,O(n) 借助哈希表实现O(n),相当于用空间换时间:
def get_pair(input_list):
dic = {}
for v in input_list:
if v not in dic: # 为了去掉重复值,将元素插入dictionary时,记录出现的次数。
dic[v] = 0
else:
dic[v] = dic[v] + 1
for v in input_list:
if 10 - v in dic and dic[10-v] >= 0: # 限制一个元素只能用一次。
print(v, 10-v)
dic[10-v] = dic[10-v] - 1
dic[v] = dic[v] - 1
l = [2,3,5,1,8,9,5,7,4,6,9]
get_pair(l)
本文介绍了三种方法解决数组元素相加等于10的组合问题,包括O(N^2)的双重循环,O(NlogN)的排序一重循环,以及借助哈希表实现的O(n)时间复杂度解决方案。
1602

被折叠的 条评论
为什么被折叠?



