找出列表中任意兩個(gè)數(shù)字相加等于給定值

源碼: 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)]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容