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

无导入依赖优化Python统计子串和为目标值代码的超时问题

问题分析

你现有代码的核心问题是性能不足:

  • 时间复杂度为O(n²):每次迭代都要遍历数组计算新的子数组和,同时调用count方法遍历统计目标值出现次数,当序列长度达到10000时,总操作量接近1亿次,必然会触发超时。
  • 存在大量重复计算:不同长度的连续子串和的计算没有复用历史结果,造成了无意义的性能损耗。
优化方案

采用前缀和+哈希计数的思路,将时间复杂度降到O(n),核心逻辑如下:

  1. 定义前缀和pre_sum,表示从数组第一个元素到当前遍历元素的累加和
  2. 任意连续子串[j+1, i]的和等于pre_sum[i] - pre_sum[j],我们需要这个值等于目标subtotal,推导可得pre_sum[j] = pre_sum[i] - subtotal
  3. 用字典记录每个前缀和出现的次数,遍历过程中直接查询pre_sum[i] - subtotal的出现次数,累加到最终结果即可
优化后代码
def ex1(int_seq, subtotal):
    list_numbers = list(map(int, int_seq.split(",")))
    pre_sum_count = {0: 1}  # 初始前缀和0出现1次,对应从第一个元素开始的子串场景
    pre_sum = 0
    res = 0
    for num in list_numbers:
        pre_sum += num
        # 查找符合要求的前缀和出现次数,累加结果
        res += pre_sum_count.get(pre_sum - subtotal, 0)
        # 更新当前前缀和的计数
        pre_sum_count[pre_sum] = pre_sum_count.get(pre_sum, 0) + 1
    return res
效果验证

用你提供的测试用例验证:
输入int_seq='3,0,4,0,3,1,0,1,0,1,0,0,5,0,4,2',subtotal=9,运行代码输出结果为7,和预期完全一致。
针对10000个1组成的超长序列,该代码运行时间可稳定控制在毫秒级,完全满足1秒的时间限制要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:09:03