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

CodeChef最长偶连续子数组题首份Java代码提交不通过排查

CodeChef最长全偶数连续子数组提交错误排查

题目说明

给定长度为N的整数数组,查找所有元素均为偶数的最长连续子数组,输出该子数组的长度。连续子数组指数组中下标连续的一段元素,形式为A_i, A_{i+1}, ..., A_j,其中i、j为合法数组下标。
典型测试样例如下:

  • 输入:
3
4
1 2 2 4
3
2 4 6
5
2 3 2 2 5
  • 对应预期输出:
3
3
2

问题现象

两份功能目标一致的Java代码表现差异明显:

  • 第一份代码在本地IDE手动输入上述样例时可输出匹配预期的结果,但提交至评测平台后所有测试用例均无法通过
  • 第二份代码提交后可通过全部测试用例

提交失败的代码

public static void main(String[] args)
{
    Scanner sc = new Scanner(System.in);
    int t = sc.nextInt();
    int j = 0;
    while(t-- > 0)
    {
        int n = sc.nextInt();
        int count = 0;
        int[] arr = new int[n];
        for(int i = 0; i < n; i++)
        {
            arr[i] = sc.nextInt();
        }
        for(int k = 1; k < n; k++)
        {
            j = k-1;
            if(arr[j]%2==0 && arr[k]%2==0)
            {
                count++;
            }
            else
            {
                j++;
            }
        }
        System.out.println(count+1);
    }
    return;
}

可全量通过的代码

public static void main (String[] args) throws java.lang.Exception
{
    try {
        Scanner sc=new Scanner(System.in);
        int t=sc.nextInt();
        while (t-->0)
        {
            int n=sc.nextInt();
            int count = 0;
            int res = -1 ;
            int[] a=new int[n];
            for (int i = 0; i < n; i++)
            {
                a[i]=sc.nextInt();
            }

            for (int i = 0; i < n; i++)
            {
                if (a[i]%2==0)
                {
                    count++;
                    res = Math.max(count ,res);
                }
                else {
                    count = 0;
                }
            }
            System.out.println(res);
        }
    } catch(Exception e) {
    }
}

错误根因

第一份代码的核心逻辑存在本质缺陷,本地样例运行正确完全是巧合:

  1. 计数逻辑完全错误:代码仅统计数组中「相邻两个元素均为偶数」的总对数,最后加1作为结果,既没有在遇到奇数时重置连续计数,也没有对比多段不连续偶数段的长度取最大值。
  2. 存在无效冗余代码:变量j定义在所有测试用例循环的外层,但内层数组遍历中每次进入循环都会把j赋值为k-1,else分支中的j++语句不会对计数产生任何影响,属于完全无效的代码。
  3. 边界场景全覆盖失败:
    • 数组全为奇数时,代码会输出0+1=1,但正确结果应为0;
    • 数组存在多段不连续偶数时,比如数组[2,2,3,2,2,2],代码会统计到4组相邻偶数对,输出5,但实际最长连续偶数长度为3;
    • 数组中存在单独的偶数元素、偶数段位于数组首尾等场景,计数结果均会出错。
      给出的3个典型样例刚好满足「数组中只有一段连续偶数,且相邻偶数对总数+1等于该段长度」的条件,错误计算结果和正确值刚好重合,才会出现本地测试正常、提交全错的现象。

内容的提问来源于stack exchange,提问作者Aditya Raj Pateriya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:33:25