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

我的最长交替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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:39:33