index + 1数组空指针

时间:2017-04-02 23:26:49

标签: java arrays

问题:给定一个排序数组,删除重复项,使每个元素只出现一次并返回新长度。

不要为另一个数组分配额外的空间,必须使用常量内存来执行此操作。

实施例 给定输入数组A = [1,1,2],

你的函数应该返回length = 2,A现在是[1,2]。

我的解决方案:

public int removeDuplicates(int[] nums) {

    if(nums.length == 0) {
        return 0;
    }

    int size = 0;
    for(int i = 0; i < nums.length; i++) {
        if((i + 1) <= nums.length && (nums[i] != nums[i + 1])) {
            nums[size] = nums[i];
            size++;
        }
    }

}

我遇到的问题是第二个if语句中的ArrayIndexOutOfBoundsException:

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:5位于Main.main的Solution.removeDuplicates(Solution.java:15)(Main.java:10)

我不明白为什么因为我正在检查i + 1&lt; =数组的长度,这应该可以防止溢出错误。

1 个答案:

答案 0 :(得分:2)

您应该将“i + 1&lt; = nums.length”更改为“i + 1&lt; nums.length”。当你的变量(i)在循环结束时(i + 1)将不在数组中。例如A = [1,1,2],长度为3.在for循环中,i为2,i + 1为3,因此nums [3]将超出界限。

     for(int i = 0; i < nums.length; i++) {
        if((i + 1) < nums.length && (nums[i] != nums[i + 1])) {
            nums[size] = nums[i];
            size++;
        }
        else if(i + 1 == nums.length) 
            num[size] = nums[i];
     }