银河出逃时 2021-07-15 20:14 采纳率: 88.2%
浏览 24
已采纳

代码超时请问在此基础上怎么改

我的一个朋友取从1到n的所有数字的序列(其中n>0)。
在这个序列中,他选择了两个数字,a和b。
他说a和b的乘积应该等于序列中所有数字的和,不包括a和b。
给定一个数字n,你能告诉我他从序列中排除的数字吗?
该函数接受参数:n(n始终严格大于0),
并返回一个数组或字符串(取决于语言),格式为:[(a,b),…]
将按“a”的递增顺序排序。碰巧有几种可能的(a,b)?
如果找不到可能的数字,函数将返回一个空数组(或空字符串),
这将证明我的朋友没有说实话!

题如上,代码没错但是限制了时间,有些值会超时,请问怎么改

def remov_nb(n):
    res = []
    l = [x for x in range(1, n + 1)]
    s = sum(l)
    for i in l:
        for j in l:
            if i * j == s - i - j:
                res.append((i,j))
                break
    return res
print(remov_nb(26))
  • 写回答

3条回答 默认 最新

  • 天元浪子 Python领域优质创作者 2021-07-15 23:06
    关注

    我想问的是,超时的时候,你的n有多大?但你没有明白我的意思。不过,这不是重点,重点是这样简单的算法,不应该如此耗时。我简单写了一个算法,令n从1000到1100,其中有20个数形成的序列可以找到符合条件的a和b,每一个查找,都没有超过1毫秒。

    >>> import time
    >>> def remov_nb(n):
        s = sum(range(1, n+1))
        p, q = int((s-n)/(n+1)), n
        res = list()
        while p <= q:
            if p*q == s-p-q:
                res.append((p,q))
                p += 1
                q -= 1
            elif p*q > s-p-q:
                q -= 1
            else:
                p += 1
        return sorted(res, key=lambda x:x[0])
    
    >>> for i in range(1000, 1100):
        t0 = time.time()
        result = remov_nb(i)
        t1 = time.time()
        if result:
            print(i, result, '%0.3f'%(t1-t0))
    
            
    1006 [(546, 925)] 0.001
    1011 [(682, 748)] 0.000
    1016 [(700, 736)] 0.001
    1018 [(615, 841)] 0.000
    1025 [(528, 993)] 0.001
    1034 [(633, 843)] 0.001
    1035 [(540, 990)] 0.000
    1037 [(682, 787)] 0.000
    1039 [(552, 976)] 0.001
    1044 [(640, 850)] 0.000
    1050 [(687, 801)] 0.001
    1052 [(672, 822)] 0.001
    1060 [(736, 762)] 0.001
    1068 [(598, 952)] 0.000
    1074 [(741, 777)] 0.001
    1077 [(595, 973)] 0.001
    1086 [(700, 841)] 0.001
    1090 [(561, 1057)] 0.001
    1093 [(631, 945), (687, 868)] 0.000
    1094 [(666, 897)] 0.001
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已采纳回答 7月15日
  • 修改了问题 7月15日
  • 创建了问题 7月15日

悬赏问题

  • ¥15 求帮我调试一下freefem代码
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图