Python :和为S的两个数字

来源:互联网 发布:ubuntu 文字编辑 编辑:程序博客网 时间:2024/05/29 04:48

牛客网上的剑指offer在线编程题:

题目描述:

输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 

输出描述:

对应每个测试案例,输出两个数,小的先输出。


方法一:
# -*- coding:utf-8 -*-class Solution:    def FindNumbersWithSum(self, array, tsum):        all = []        for i in range(len(array)):            for j in range(i + 1, len(array)):                if array[i] + array[j] == tsum:                    seq = [array[i], array[j]]                    all.append(seq)                    break        if len(all) > 1:            pro_all = {}            for k in range(len(all)):                pro = all[k][0] * all[k][1]                pro_all[k] = pro            pro_sorted = sorted(pro_all.items(), key = lambda item: item[1])            return all[pro_sorted[0][0]]        elif len(all) == 1:            return all[0]        else:            return []


方法二:

# -*- coding:utf-8 -*-class Solution:    def FindNumbersWithSum(self, array, tsum):        if array is None :            return []        if len(array) == 0:            return []        i = 0        j = len(array) - 1        while i < j:            if array[i] + array[j] == tsum:                return array[i], array[j]            elif array[i] + array[j] < tsum:                i += 1            else:                j -= 1        return []




0 0
原创粉丝点击