考察的知识点:双指针;
解答方法分析:
- 将结果数组的尾部指针slow指向结果数组的最后一个位置。初始化牛群数量的计数count为1。
- 遍历数组nums,使用fast指针指向当前位置。
- 如果当前位置的元素与前一个位置的元素相等,则说明牛群数量相同,将count增加1。
- 如果当前位置的元素与前一个位置的元素不相等,则说明遇到了新的位置,将count重新设置为15. 如果count小于于3,说明当前位置上的牛群数量满足条件,将当前位置的元素放入结果中,并将slow指针向前移动一位。
- 最终遍历完成后,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; } };