整数序列方向变化次数统计程序bug排查:输出结果不符预期
问题分析与修复
原代码的Bug点
- 初始方向错误:将
a初始设为0,会与第一个元素产生无意义的初始方向(第一个元素前没有前置元素,不应存在方向),导致后续把「中性→第一个有效方向」的变化错误计入次数。 - 无用分支:
elif b != 0分支永远不会执行,因为前面已经判断了b>0和b<0,剩余情况只有b=0。 - 未过滤中性方向:代码没有区分「中性方向(不变)」和「有效方向(递增/递减)」,导致把中性与有效方向的切换也算作方向变化,不符合预期。
修复思路
聚焦有效方向(递增/递减)之间的变化,忽略中性方向的干扰:
- 先计算序列中相邻元素的差值,过滤掉差值为0的中性项。
- 仅统计过滤后有效差值的符号变化次数(正变负或负变正)。
修复后的代码
def changing_direction(elements: list[int]) -> int: # 计算相邻元素的差值,过滤掉中性差值(0) diffs = [] for i in range(1, len(elements)): diff = elements[i] - elements[i-1] if diff != 0: diffs.append(diff) count = 0 # 统计有效差值的符号变化次数 for i in range(1, len(diffs)): prev_sign = diffs[i-1] > 0 curr_sign = diffs[i] > 0 if prev_sign != curr_sign: count += 1 return count print("Example:") print(changing_direction([6, 6, 6, 4, 1, 2, 5, 9, 7, 8, 5, 9, 4, 2, 6]))
验证结果
运行修复后的代码,输出为7,符合预期。
内容的提问来源于stack exchange,提问作者DannyMoham1
相关产品推荐
相关产品推荐

