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

LeetCode有序数组去重题Java可通过C#报数组越界异常原因求解

问题根因

你编写的C#解法核心双指针逻辑和Java版本完全一致,代码本身不会触发数组索引越界。你看到的System.ArgumentException是LeetCode的C#判题框架校验结果时抛出的,触发原因是缺少空输入/长度为0数组的边界处理:

  • 当输入nums为空数组时,你的代码中for循环不会执行,最终返回pointer1 + 1 = 1
  • 判题框架会根据你返回的长度1,尝试从长度为0的原数组中截取前1个元素做结果验证,调用数组拷贝方法时就会抛出偏移量、长度不匹配的错误。

Java解法未报错的原因是你执行的测试用例没有覆盖空数组场景,若给Java版本传入空数组,访问nums.length时会直接抛出空指针异常,本身也存在边界处理缺失的问题。

修复方案

在代码开头增加边界校验逻辑即可:

public int RemoveDuplicates(int[] nums)
{
    // 处理空数组/输入为null的边界场景
    if (nums == null || nums.Length == 0)
    {
        return 0;
    }

    int pointer1 = 0;
    for (int pointer2 = 1; pointer2 < nums.Length; pointer2++)
    {
        if (nums[pointer1] != nums[pointer2])
        {
            pointer1++;
            nums[pointer1] = nums[pointer2];
        }
    }
    return pointer1 + 1;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:06:04