我的最长交替0-1子序列代码仅通过43%测试用例,请求排查问题
我的最长交替0-1子序列代码仅通过43%测试用例,请求排查问题
你遇到的问题大概率有两个核心原因,我们逐一分析:
1. 调试用的print语句干扰了评测输出
你的代码里保留了print(inputLst)这一行调试代码,而在线编程评测系统通常会严格检查程序的输出内容——它只期望函数返回的数值结果,任何额外的打印内容(比如这里的输入列表)都会被当成程序输出的一部分,导致系统判定结果不符合预期。
比如当测试用例是[0]时,你的函数会先打印[0],再返回1,系统接收到的完整输出是:
[0] 1
而系统预期的输出只有1,因此会判为错误。这会直接导致大量测试用例失败。
解决方案:删除所有调试用的print语句,只保留函数的核心逻辑。
2. 可能误解了题目中的“subsequence”概念
你当前的代码是在寻找连续的交替子数组(subarray),但题目里写的是“longest subsequence of alternating 0's and 1's”——在算法术语中,subsequence通常指不连续但保持元素顺序的子序列,和连续的subarray是完全不同的概念。
如果题目确实要求找不连续的最长交替子序列,那你的算法完全错误,正确的思路可以用动态规划实现:
- 维护两个变量
last0(以0结尾的最长交替子序列长度)和last1(以1结尾的最长交替子序列长度) - 遍历数组,根据当前元素更新这两个变量
- 最终结果取两者的最大值
示例代码:
def sequence(inputLst): if not inputLst: return 0 last0 = 1 if inputLst[0] == 0 else 0 last1 = 1 if inputLst[0] == 1 else 0 for num in inputLst[1:]: if num == 0: last0 = last1 + 1 else: last1 = last0 + 1 return max(last0, last1)
不过回到你的情况,你的自定义测试用例都是按连续子数组设计的,且代码在这些测试中全部正确,所以最可能的失败原因是第一个——调试print语句干扰了评测系统的输出判断。
修复后的连续子数组版本代码(去掉调试语句)
def sequence(inputLst): if len(inputLst) == 1: return 1 biggest = 0 count = 1 for i in range(1, len(inputLst)): if inputLst[i] != inputLst[i-1]: count += 1 else: biggest = max(biggest, count) count = 1 biggest = max(biggest, count) return biggest
备注:内容来源于stack exchange,提问作者Luigi Carvalho
相关产品推荐
相关产品推荐

