题目

题解

方法:双指针法
跟第26题类似,26题也是类似这种"往前覆盖重复的数字"的思想。

代码

public class code80 {

    // public static int removeDuplicates(int[] nums) {
    // if (nums.length == 0) {
    // return 0;
    // }
    // int i = 0;
    // int count = 1;
    // for (int j = 1; j < nums.length; j++) {
    // if (nums[j] != nums[i]) {
    // i++;
    // nums[i] = nums[j];
    // count = 1;
    // } else if (count >= 2) {
    // continue;
    // } else {
    // i++;
    // nums[i] = nums[j];
    // count++;
    // }
    // }
    // return i + 1;
    // }

    public static int removeDuplicates(int[] nums) {
        if (nums.length <= 2) {
            return nums.length;
        }
        int index = 2;
        for (int i = 2; i < nums.length; i++) {
            if (nums[i] != nums[index - 2]) {
                nums[index] = nums[i];
                index++;
            }
        }
        return index;
    }

    public static void main(String[] args) {
        int nums[] = { 0, 0, 1, 1, 1, 1, 2, 3, 3 };
        int len = removeDuplicates(nums);
        for (int i = 0; i < len; i++) {
            System.out.print(nums[i] + " ");
        }
        System.out.println();
    }
}

参考

  1. 删除排序数组中的重复项 II——题解一
  2. 直接遍历一次即可——题解二