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

如何优化计算和等于指定值的子串数量的超时Python代码

代码优化方案

你原有的代码时间复杂度为O(n²),每轮循环都需要生成新的累加数组并遍历计数,输入字符串长度较大时会触发超时。我们可以采用前缀和+哈希表计数的方法,将时间复杂度降至O(n),可轻松应对超长输入场景。

核心原理

定义前缀和pre_sum[i]为序列前i个元素的和,我们需要统计的连续子串和等于m的数量,等价于统计满足pre_sum[j] - pre_sum[i] = m的(i,j)配对总数,也就是遍历到第j位时,值为pre_sum[j] - m的前缀和已经出现过的次数。我们用哈希表实时记录每个前缀和的出现次数,单次遍历即可完成统计。

优化后代码

from collections import defaultdict

m = 9
numbers = list(map(int, S.split(',')))
# 记录每个前缀和的出现次数,初始前缀和0对应子串从首位开始的场景
prefix_cnt = defaultdict(int)
prefix_cnt[0] = 1
current_sum = 0
result = 0

for num in numbers:
    current_sum += num
    # 累加符合要求的历史前缀和数量
    result += prefix_cnt.get(current_sum - m, 0)
    # 更新当前前缀和的计数
    prefix_cnt[current_sum] += 1

print(result)

优化收益

  • 时间复杂度从O(n²)降到O(n),即使是长度10万级别的输入也可以在1秒内完成计算
  • 空间复杂度从原方案的O(n)降到O(k),k为不同前缀和的数量,多数场景下远小于序列长度n

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:57:00