找出数组中两个元素相加等于10的组合

本文介绍了三种方法解决数组元素相加等于10的组合问题,包括O(N^2)的双重循环,O(NlogN)的排序一重循环,以及借助哈希表实现的O(n)时间复杂度解决方案。

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)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值