Python校验超递增序列代码结果不符合预期如何修正?
超递增序列校验代码修复方案
问题原因
你当前的代码存在两个逻辑错误,导致结果不符合预期:
- 多余的严格递增校验:第一个
any判断要求序列每个元素严格大于前一个元素,这是完全不必要的限制。超递增序列仅要求元素大于前面所有元素总和,不需要大于上一个元素,比如你给出的示例(-1, 0, 0, 1)里第三个元素0等于第二个元素0,但它大于前面所有元素总和-1+0=-1,符合超递增规则,却被你的第一层判断直接过滤掉了。 - 仅校验前两个元素和:第二层
all判断仅要求当前元素大于前两个元素的和,而非大于前面所有元素的和,遇到长序列时会出现逻辑错误,比如序列[1,2,4,7],你现有代码会判定为符合要求,但实际前面三个元素总和为7,第四个元素7不大于总和,不属于超递增序列。
修复后的实现代码
def super_increasing(seq): # 长度为0或1的序列默认符合超递增规则(无需要校验的元素) if len(seq) <= 1: return True # 维护前面所有元素的累加和 prev_sum = seq[0] for num in seq[1:]: if num <= prev_sum: return False prev_sum += num return True
测试验证
你给出的所有测试用例运行结果如下:
(1, 3, 5, 7, 19)→ 返回False,符合预期[1, 3, 5, 11, 21]→ 返回True,符合预期[0, 0, 1, 2]→ 返回False,符合预期(-1, 0, 0, 1)→ 返回True,符合预期(1, 2, 0, 4)→ 返回False,符合预期
内容的提问来源于stack exchange,提问作者rusttree
相关产品推荐
相关产品推荐

