import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @return int整型
     */
    public int remove_duplicates_v3 (int[] nums) {
        // write code here
        if (nums.length == 0)
            return 0;
        int slow = 0;
        int count = 1;
        for (int fast = 1; fast < nums.length; fast++) {
            if (nums[fast] - nums[fast - 1] == 0) {
                if (count < 3) {
                    nums[++slow] = nums[fast];
                    count++;
                }
            } else {
                nums[++slow] = nums[fast];
                count = 1;
            }
        }
        return ++slow;
    }
}

该代码使用的编程语言是Java。

这道题目考察的是数组的处理和快慢指针的应用。

解题思路如下:

  1. 首先判断数组 nums 是否为空,如果为空则直接返回0。
  2. 定义两个指针:slow 和 fast,分别表示慢指针和快指针。初始时,slow 指向数组的第一个元素,count 为1。
  3. 从数组的第二个元素开始遍历,即 fast 从1到nums.length-1
  4. 判断当前元素与前一个元素是否相等,即 nums[fast] - nums[fast - 1] == 0,如果相等,则说明出现了重复元素。如果 count < 3,意味着重复元素的个数不超过2个,可以将该重复元素保留在数组中。将 nums[fast] 赋值给 nums[++slow],同时 count 自增1。
  5. 如果当前元素与前一个元素不相等,则说明出现了新的元素。将当前元素赋值给 nums[++slow],同时重置 count 为1。
  6. 遍历结束后,返回 slow 的值加1,即为去除重复元素后的新数组长度。

代码的文字解释如下所示:

  1. 定义一个方法 removeDuplicates_v3,接收一个整型数组 nums 作为参数。
  2. 首先判断数组是否为空,如果是则直接返回0。
  3. 定义两个整型变量 slow 和 count 分别初始化为0和1,用于记录新数组的指针位置和重复元素的出现次数。
  4. 使用循环遍历数组,从第二个元素开始比较。
  5. 如果当前元素与前一个元素相等,则判断重复元素的个数是否小于3,如果是则将该重复元素保留在新数组中,同时更新 slow 和 count
  6. 如果当前元素与前一个元素不相等,则说明出现了新的元素,将新元素保存在新数组中,同时重置 count
  7. 循环结束后,返回新数组的长度 slow + 1