考察的知识点:双指针;

解答方法分析:

  1. 将结果数组的尾部指针slow指向结果数组的最后一个位置。初始化牛群数量的计数count为1。
  2. 遍历数组nums,使用fast指针指向当前位置。
  3. 如果当前位置的元素与前一个位置的元素相等,则说明牛群数量相同,将count增加1。
  4. 如果当前位置的元素与前一个位置的元素不相等,则说明遇到了新的位置,将count重新设置为15. 如果count小于于3,说明当前位置上的牛群数量满足条件,将当前位置的元素放入结果中,并将slow指针向前移动一位。
  5. 最终遍历完成后,slow指针的位置就是结果数组的长度。

所用编程语言:C++;

完整编程代码:↓

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型vector
     * @return int整型
     */
    int remove_duplicates_v3(vector<int>& nums) {
        int n = nums.size();
        if (n == 0 || n == 1) {
            return n;
        }

        int slow = 1;
        int count = 1;

        for (int fast = 1; fast < n; fast++) {
            if (nums[fast] == nums[fast - 1]) {
                count++;
            } else {
                count = 1;
            }

            if (count <= 3) {
                nums[slow] = nums[fast];
                slow++;
            }
        }

        nums[slow];
        return slow;
    }
};