可以使用双指针的方法处理有序数组中的重复项。具体步骤如下:
- 如果数组为空或只包含一个元素,无需操作,直接返回数组长度。
- 设置两个指针 i 和 j,其中 i 是慢指针,而 j 是快指针。快指针 j 用于遍历数组,慢指针 i 则指向数组中最后一个不重复的元素。
- 当 nums[i] = nums[j] 时,说明有重复元素出现,此时仅仅需要快指针 j 向后移动即可。
- 当 nums[i] ≠ nums[j] 时,说明已经遍历到了一个新元素,因此需要更新慢指针 i,使其指向新元素,同时将新元素赋值给nums[i]。
- 当快指针 j 遍历完数组后,即可得到数组的去重长度 i+1。
代码如下:
public int removeDuplicates(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
int i = 0;
for (int j = 1; j < nums.length; j++) {
if (nums[i] != nums[j]) {
i++;
nums[i] = nums[j];
}
}
return i + 1;
}