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

LeetCode 922 按奇偶排序数组II代码异常求助:部分用例偶数位填0

问题诊断与修复

你的代码存在三个核心问题,导致奇数在前的测试用例输出异常:

  1. 循环条件逻辑错误
    你使用a < nums.length && b < nums.length+1 && c < nums.length+1的逻辑与判断,当处理完所有奇数后,c会超出数组长度(比如测试用例中c最终变为9,而数组长度仅为8),此时循环直接终止,剩余偶数无法填充到对应索引位置,导致这些位置保留初始值0。正确的循环条件只需判断a < nums.length——因为题目保证奇偶元素各占一半,遍历完所有元素后,目标数组的所有位置必然被填满。

  2. 条件分支未互斥
    两个独立的if语句会导致元素被重复判断:处理完偶数后a已自增,接着会执行第二个if判断新的nums[a],不仅逻辑冗余,还可能在a到达数组末尾时触发数组越界异常。应改为else if确保每个元素仅被处理一次。

  3. 输出逻辑错误
    增强for循环for (int i : res)中的i是数组元素值而非索引,你写成System.out.println(res[i])会用元素值作为索引访问数组,导致输出混乱甚至数组越界。正确做法是直接输出i。


修正后的代码

public static void main(String[] args) {
    int[] nums = {1,3,5,7,2,4,6,8};
    int[] res = new int[nums.length]; 
    int current = 0;
    int evenPos = 0;  // 偶数元素的目标索引,从0开始每次加2
    int oddPos = 1;   // 奇数元素的目标索引,从1开始每次加2
    
    while (current < nums.length) {
        if (nums[current] % 2 == 0) {
            res[evenPos] = nums[current];
            evenPos += 2;
        } else {
            res[oddPos] = nums[current];
            oddPos += 2;
        }
        current++; // 统一在处理完元素后自增,避免逻辑混乱
    }
    
    // 正确输出数组所有元素
    for (int num : res) {
        System.out.println(num);
    }
}

修正后的代码对两种测试用例都能输出符合要求的结果,比如测试用例{1,3,5,7,2,4,6,8}的输出为:

2
1
4
3
6
5
8
7

内容的提问来源于stack exchange,提问作者Prateek Goyal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 02:33:25