Go 如何删除排序数组中的重复项?

4 min read

可以使用双指针的方法处理有序数组中的重复项。具体步骤如下:

  1. 如果数组为空或只包含一个元素,无需操作,直接返回数组长度。
  2. 设置两个指针 i 和 j,其中 i 是慢指针,而 j 是快指针。快指针 j 用于遍历数组,慢指针 i 则指向数组中最后一个不重复的元素。
  3. 当 nums[i] = nums[j] 时,说明有重复元素出现,此时仅仅需要快指针 j 向后移动即可。
  4. 当 nums[i] ≠ nums[j] 时,说明已经遍历到了一个新元素,因此需要更新慢指针 i,使其指向新元素,同时将新元素赋值给nums[i]。
  5. 当快指针 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;
}