如何修改循环逻辑避免数组首尾元素配对求和?
问题分析与解决
你的代码问题出在j循环的范围处理:当i=0时,range(i-1, i+1)会生成-1和0两个索引,其中-1对应数组的最后一个元素,导致首尾元素(9和4)的和被计入计算,而这显然不符合你的测试需求(首尾元素不算相邻配对)。同时,j循环包含了i本身,虽然被num_list[i] != num_list[j]过滤,但属于无效计算。
修正后的代码
def _sum(num_list): # 处理数组长度小于2的边界情况 if len(num_list) < 2: return 0 # 可根据实际需求调整返回值 maxSum = num_list[0] + num_list[1] # 遍历所有相邻元素对(i和i+1),不包含首尾配对 for i in range(len(num_list) - 1): current_sum = num_list[i] + num_list[i+1] maxSum = max(maxSum, current_sum) return maxSum print(_sum([1, 8, 7, 3, 5, 2])) # 输出:15(正确) print(_sum([1, 2, 45, 4, 5, 6, 7, 3, 2])) # 输出:49(正确) print(_sum([9, 2, 3, 4, 7, 1, 2, 3, 4])) # 输出:11(正确)
修正说明
- 遍历逻辑调整:直接遍历每个元素与其下一个元素的配对(
i从0到len(num_list)-2),确保只计算线性相邻的元素对,排除首尾环形配对的情况。 - 边界处理:增加了数组长度小于2的判断,避免索引越界错误。
- 简化计算:去掉了冗余的j循环和元素相等判断,直接计算相邻元素和并更新最大值,代码更高效清晰。
内容的提问来源于stack exchange,提问作者oliv
相关产品推荐
相关产品推荐

