牛客网 和为S的两个数字

题目:

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

输出:

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

解法:

自己的想法是一个标记指向最小值,然后判断sum-array[low]是否在数组中,如果在计算积并存储,最终输出积最小的结果。

class Solution:
    def FindNumbersWithSum(self, array, tsum):
        # write code here
        low=0
        mid=len(array)//2
        min_mul=float('Inf')
        ans=[]
        while low<mid:
            if tsum-array[low] in array:
                if array[low]*(tsum-array[low])<min_mul:
                    min_mul=array[low]*(tsum-array[low])
                    ans=[array[low],tsum-array[low]]
                low+=1
        return ans

但是提交时显示:运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。

参考别人解法:和为S的两个数字,之后,修改上述方法:

class Solution:
    def FindNumbersWithSum(self, array, tsum):
        # write code here
        low=0
        mid=len(array)//2
        min_mul=float('Inf')
        ans=[]
        for low in range(mid):
            for v1 in array[low:]:
                if array[low]+v1==tsum:
                    ans.append([array[low],v1])
        if ans:
            return ans[0]
        else:
            return ans

猜你喜欢

转载自blog.csdn.net/sxllllwd/article/details/81505951