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
相关产品推荐
相关产品推荐

