美文网首页
找出列表中任意两个数字相加等于给定值

找出列表中任意两个数字相加等于给定值

作者: 极光火狐狸 | 来源:发表于2018-10-02 15:36 被阅读23次

    源码: example1

    # -.- coding:utf-8 -.-
    # 给定一个数字, 在一个任意序列的列表中找到两个为一组的
    # 数字(一组或多组)相加结果等于给定数字, 返回一组或多组.
    #
    # 例如:
    # 列表: [1, 2, 3, 4, 5, 6, 7, 8, 9,]
    # 给定一个数字: 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: 结果没问题, 但是在唯一约束列表中出现冗余结果, 不是特别合适
    # TODO: 而且这种写法是以二次幂的基数增长, 当列表越大时越慢!
    
    

    源码: example2

    # -.- coding:utf-8 -.-
    # 给定一个数字, 在一个任意序列的列表中找到两个为一组的
    # 数字(一组或多组)相加结果等于给定数字, 返回一组或多组.
    #
    # 例如:
    # 列表: [1, 2, 3, 4, 5, 6, 7, 8, 9,]
    # 给定一个数字: 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)]
    
    

    相关文章

      网友评论

          本文标题:找出列表中任意两个数字相加等于给定值

          本文链接:https://www.haomeiwen.com/subject/wbqaoftx.html