You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Codewars中Delta Generators函数执行超时(12000ms)求助

解决Delta函数超时问题

需求回顾

实现delta函数,接收数值序列和正整数level,返回序列的n阶差值(差值定义为后项减前项,如[1,3,2]→[2,-1]),level为差值的阶数(例如加速度是位置的2阶差值)。

示例:

input = [1, 2, 4, 7, 11, 16, 22]
list(delta(input, 1)) # [1, 2, 3, 4, 5, 6]
list(delta(input, 2)) # [1, 1, 1, 1, 1]
list(delta(input, 3)) # [0, 0, 0, 0]

优化后的实现

def delta(values, n):
    current = list(values)
    for _ in range(n):
        # 用列表推导式生成下一阶差值,内部优化过的操作比手动循环更快
        current = [current[i+1] - current[i] for i in range(len(current)-1)]
        # 序列长度不足时提前终止循环,避免无效操作
        if not current:
            break
    return current

原代码超时原因分析

  1. 不必要的内存操作:原代码中多次调用clear()和copy(),这些操作会额外消耗时间和内存,尤其是处理大序列时,每次复制整个列表的成本极高。
  2. 低效的元素赋值:手动循环给预分配的列表赋值,效率远低于Python内部优化的列表推导式——列表推导式在C层面执行,比纯Python循环快得多。
  3. 冗余操作:原代码中lst.clear()后立刻重新赋值lst = [0]*(len(values)-1),clear()完全是多余的,徒增操作开销。

验证示例

运行优化后的代码,完全符合预期输出:

input = [1, 2, 4, 7, 11, 16, 22]
print(delta(input, 1)) # [1, 2, 3, 4, 5, 6]
print(delta(input, 2)) # [1, 1, 1, 1, 1]
print(delta(input, 3)) # [0, 0, 0, 0]

内容的提问来源于stack exchange,提问作者Nika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 18:42:43