前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >牛客网 和为S的两个数字

牛客网 和为S的两个数字

作者头像
发布2018-09-03 18:10:55
5590
发布2018-09-03 18:10:55
举报
文章被收录于专栏:WD学习记录WD学习记录

题目:

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

输出:

代码语言:javascript
复制
对应每个测试案例,输出两个数,小的先输出。

解法:

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

代码语言:javascript
复制
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的两个数字,之后,修改上述方法:

代码语言:javascript
复制
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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年08月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目:
  • 解法:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档