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

如何优化查找数组左右元素和相等的平衡点的Python代码?

问题分析

原代码超时的根本原因是时间复杂度达到了O(n²):每次循环都对左右两个切片执行sum()操作,单次求和的开销为O(n),当测试用例的数组长度较大时,总运算量会快速增长,触发超时。

优化方案

方案1:总和累加遍历法(最优,时间复杂度O(n),空间复杂度O(1))

  • 核心逻辑:先计算数组的总求和结果,遍历数组时仅维护左侧元素的累加和,右侧元素和可以通过「总和 - 左侧和 - 当前元素值」直接计算得到,无需重复切片求和。
  • 优化后代码:
def balancedSums(arr):
    total = sum(arr)
    left_sum = 0
    for num in arr:
        right_sum = total - left_sum - num
        if left_sum == right_sum:
            return "YES"
        left_sum += num
    return "NO"
  • 可选优化点(可结合题目约束使用):
    • 数组长度为1时可直接返回YES,无需遍历
    • 若数组元素全为非负数,当left_sum * 2 + num > total时可提前终止遍历,后续不可能出现平衡元素

方案2:前缀和数组法(时间复杂度O(n),空间复杂度O(n))

  • 核心逻辑:提前生成前缀和数组,prefix[i]代表前i个元素的和,遍历的时候直接取prefix[i]作为左侧和,右侧和为prefix[-1] - prefix[i+1],对比相等即可。该方案适合需要多次查询平衡元素的场景,单次查询的场景效率低于方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:09:03