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

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

作者: 极光火狐狸 | 来源:发表于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)]

相关文章

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

    源码: example1 源码: example2

  • 2018-06-06Hashmap

    先看一道题:给定一个数组 nums = [2, 7, 11, 15]要求找出数组中任意两个数相加等于 target...

  • [LeetCode By Python] 1. Two Sum

    一、题目 二、解题 1)题意: 找出列表中任意两数的和等于给定值的两数下标。 2)关键点 进行循环时候,跳出条件是...

  • 一个笔试题

    需求 有一个数组,输出任意两个相加等于指定值的数字 实现思路 从第index个开始,跟index+1相加是否等于t...

  • TwoSum

    介绍:Two Sum给定一个整型数组,找出能相加起来等于一个特定目标数字的两个数。函数 twoSum 返回这两个相...

  • 1. Two Sum_Swift

    难度 简单 题目 在给定的数组中找出一组特定的数字,使其和等于一个给定的值,并返回这组数字的索引。Example ...

  • leetcode [1] Two Sum

    题目要求: 给定一个数组nums,然后再给定一个数字,找出数组中哪两个数字之和等于这个给定的数字。例如:Given...

  • Leetcode1——两数之和

    题目 在给定的数组中,找出两个数相加之和等于目标数target,返回两个数的下标index1,index2 Pyt...

  • 剑指 Offer II 006. 排序数组中两个数字之和

    给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 targe...

  • 167. Two Sum II - Input array is

    给定一个已按照升序排列的整数数组 nums,请你从数组中找出两个数满足相加之和等于目标数组 target。假设每个...

网友评论

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

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