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

LeetCode求数组三角和Python解法提交超时排查咨询

题目链接

Find Triangular Sum of an Array
题目要求:对数组反复执行相邻元素求和后模10的操作,直到数组仅剩1个元素,返回该元素值。

现有代码的问题

1. 致命逻辑缺陷(直接导致超时和结果错误)

  • 边界条件完全失效:当输入数组长度为1(题目允许的合法输入,比如用例[0]预期返回0),循环判断条件len(nums) != 2永远成立,每次循环生成空数组赋值给nums,程序直接陷入无限死循环,这是提交后大面积超时、仅通过1个用例的根本原因。
  • 最后一步返回结果遗漏模10操作:当数组长度降到2时,两数之和可能大于等于10,比如[6,7]求和为13,直接返回13不符合题目每步取模10的要求,会出现结果错误。
  • 循环迭代逻辑存在隐患:循环内用arrLen控制遍历范围,虽然第一次循环后arrLen会更新为新数组长度,但因为边界判断错误,遇到长度小于2的数组就会直接崩溃。

2. 效率可优化点

就算修复逻辑问题,原代码每轮迭代都新建列表、反复拷贝元素的写法也会带来额外内存和时间开销。虽然题目n最大为1000的规模下,O(n²)的模拟法完全可以通过,但可以通过原地修改数组进一步提速。如果追求极致效率,还可以利用杨辉三角的组合数数学性质,把时间复杂度降到O(n)。

可直接提交的模拟法修正代码
from typing import List
class Solution:
    def triangularSum(self, nums: List[int]) -> int:
        n = len(nums)
        for level in range(n, 1, -1):
            for i in range(level - 1):
                nums[i] = (nums[i] + nums[i+1]) % 10
        return nums[0]

这个版本直接在原数组上原地更新每一层的结果,不需要额外新建数组,没有多余拷贝操作,边界处理覆盖了长度为1的输入场景,所有步骤都做了模10处理,可以通过全部测试用例。

进阶优化思路(数学法)

三角求和的最终结果本质是原数组每个元素乘以杨辉三角第n-1行对应位置的组合数系数,求和后再模10,公式为:
$$res = \left( \sum_{i=0}^{n-1} C_{n-1}^i * nums[i] \right) \mod 10$$
其中$C_{n-1}^i$是从n-1个元素选i个的组合数。因为10不是质数,计算组合数模10的时候可以分别计算模2、模5的结果,再通过中国剩余定理合并得到最终值,这种方法时间复杂度为O(n),在n规模达到1e5以上时比模拟法优势明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:48:18