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

GeeksforGeeks编程问题求助:列表求和(含7及相邻元素排除规则)代码调试

解决数字列表总和计算问题(排除7及其相邻元素)

我来帮你搞定这个问题!先看看你的代码里存在的几个关键问题,再给你两种符合需求的正确解法。

你的代码存在的问题

  1. 未处理列表末尾的7:你的循环只遍历到len(arr)-1的前一个元素(也就是range(len(arr)-1)),如果7在列表最后一位(比如[1,7]),这个7不会被检测到,导致它和左边的元素都被计入总和,结果错误。
  2. 未排除7的左侧相邻元素:需求是排除7及其左右相邻元素,但你的代码只减去了7和它的右侧元素,完全没处理左侧的相邻元素。比如[1,7]这种情况,左侧的1应该被排除,但你的代码没有处理。
  3. 空列表的判断顺序冗余:你先计算了整个数组的和,再判断空列表,虽然结果没问题,但逻辑上没必要先计算空数组的和,大数组场景下会浪费性能。

正确解法1:记录所有需要排除的索引

这种方法先找出所有需要排除的元素索引,再计算剩余元素的和,逻辑清晰,能覆盖所有边界情况:

def calculate_sum(arr):
    # 处理空列表的情况
    if not arr:
        return 0
    
    exclude_indices = set()
    arr_length = len(arr)
    
    # 遍历数组,标记所有需要排除的索引
    for idx in range(arr_length):
        if arr[idx] == 7:
            # 排除7本身
            exclude_indices.add(idx)
            # 排除左侧相邻元素(如果存在)
            if idx > 0:
                exclude_indices.add(idx - 1)
            # 排除右侧相邻元素(如果存在)
            if idx < arr_length - 1:
                exclude_indices.add(idx + 1)
    
    # 计算剩余元素的总和
    total = 0
    for idx in range(arr_length):
        if idx not in exclude_indices:
            total += arr[idx]
    
    return total

测试示例

  • 空列表:calculate_sum([]) → 返回0,符合要求。
  • 你的测试用例[1, 3, 4, 4, 7, 7]:需要排除索引3、4、5,剩余元素是1、3、4,总和为8。
  • 边界用例[1,7]:排除索引0和1,总和为0。
  • 边界用例[7]:排除索引0,总和为0。
  • 连续7的情况[7,1,7]:排除所有索引,总和为0。

简化版解法(更高效)

如果想让代码更简洁高效,可以用一次遍历完成计算,不需要额外的集合存储空间:

def calculate_sum(arr):
    if not arr:
        return 0
    total = 0
    n = len(arr)
    for i in range(n):
        # 检查当前元素是否需要排除:是7,或是7的左右邻居
        is_excluded = False
        if arr[i] == 7:
            is_excluded = True
        elif i > 0 and arr[i-1] == 7:
            is_excluded = True
        elif i < n-1 and arr[i+1] == 7:
            is_excluded = True
        if not is_excluded:
            total += arr[i]
    return total

这个方法直接在遍历过程中判断当前元素是否符合排除条件,逻辑同样清晰,执行效率也更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 00:27:33