求助:统计含满足a+b=c的连续子数组的矩阵行数
排查矩阵符合条件行数统计的代码问题
嘿,我来帮你搞定这个问题!咱们先把核心需求再明确一遍:遍历矩阵的每一行,只要该行存在至少一组连续的三个元素a,b,c(位置为i、i+1、i+2)满足a+b=c,就把这一行计入统计——哪怕一行里有N组符合条件的子数组,也只算1次。目标是输出2,但你的代码肯定是在某个环节踩坑了,我来给你拆解常见错误和正确实现。
常见的代码错误点
我先猜几个你可能犯的错,看看是不是中了:
- 重复计数:找到一行里的第一个符合条件的子数组后,没有立刻终止该行的遍历,导致后续找到的符合项会让计数多加,比如一行有3个符合项,结果被算成3次而不是1次。
- 索引越界:循环的时候没控制范围,比如遍历到了行的最后一个元素,导致
i+2超出数组长度,直接报错或者取到错误值。 - 没有标记行状态:没有用一个变量记录当前行是否已经符合条件,而是每找到一个符合项就直接给计数加1,这就会导致重复统计同一行。
正确实现示例(以Python为例)
假设你的目标矩阵是类似这样的(只有2行符合条件):
# 示例矩阵:第1行[1,2,3,4]有1+2=3,第4行[7,1,8,9]有7+1=8,共2行符合 target_matrix = [[1,2,3,4], [5,4,9,2], [2,3,6,6], [7,1,8,9]]
下面是正确的统计代码:
count = 0 for row in target_matrix: # 标记当前行是否符合条件,初始为False is_valid_row = False # 跳过长度不足3的行(根本凑不出三个连续元素) if len(row) < 3: continue # 遍历到倒数第三个元素就停止,避免i+2越界 for i in range(len(row) - 2): a, b, c = row[i], row[i+1], row[i+2] if a + b == c: is_valid_row = True # 找到一个就立刻跳出当前行的循环,不用再找了 break # 如果该行符合条件,计数加1 if is_valid_row: count += 1 print(count) # 输出:2,符合预期
关键细节解释
- 行状态标记:用
is_valid_row变量记录当前行是否已经找到符合条件的子数组,这样不管一行里有多少个符合项,最终只会给计数加1。 - 循环范围控制:
range(len(row)-2)确保我们最多遍历到行的倒数第三个元素,这样i+2永远不会超出数组的索引范围。 - 提前终止遍历:找到第一个符合条件的子数组后就
break该行的循环,既提升了代码效率,也避免了重复判断。
如果你的代码是其他语言(比如Java、C++),核心逻辑也是一样的:用一个布尔变量标记行状态,控制遍历范围,找到符合项后立刻终止当前行的检查。
内容的提问来源于stack exchange,提问作者TheVonWaff
相关产品推荐
相关产品推荐

