牛客网 和为S的两个数字

35 篇文章 0 订阅
30 篇文章 0 订阅

题目:

输入一个递增排序的数组和一个数字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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值