LeetCode寻找数组中心索引:Python代码特定用例失败原因排查
问题分析与修正
你的代码存在几个关键错误,导致部分测试用例失败:
1. 数组长度判断错误
题目中数组长度的约束是 1 <= nums.length <= 10^4(即1到10000),但你的代码写成了 1 <= len(nums) <= 104。当测试用例的数组长度超过104时,代码会直接返回-1,完全不符合题意,这是导致部分测试用例失败的核心原因之一。
2. 多余的元素范围判断
题目虽然给出了元素的范围约束,但测试用例不会违反该规则,且题目并未要求元素超出范围时返回-1。这个判断属于多余逻辑,可能会导致合法测试用例被错误返回-1。
3. 逻辑效率极低(冗余两层循环)
你的代码通过两层循环计算后缀和,时间复杂度为O(n²)。当数组长度较大时(比如接近10000),会出现超时问题,即使部分测试用例能运行通过,也不符合算法优化的要求。
修正后的代码
class Solution: def pivotIndex(self, nums: List[int]) -> int: total_sum = sum(nums) sum_left = 0 for i in range(len(nums)): # 右侧和 = 总和 - 左侧和 - 当前元素 if sum_left == total_sum - sum_left - nums[i]: return i sum_left += nums[i] return -1
代码说明
- 先计算数组的总和
total_sum,避免重复计算后缀和 - 遍历每个索引
i,维护左侧元素的累加和sum_left - 右侧元素的和可通过
total_sum - sum_left - nums[i]快速推导(总和减去左侧和,再减去当前元素) - 当左侧和等于右侧和时,直接返回当前索引
i;遍历结束未找到则返回-1
这个方案将时间复杂度优化到O(n),同时修复了所有逻辑错误,符合题目要求。
内容的提问来源于stack exchange,提问作者Ray
相关产品推荐
相关产品推荐

