考察知识点:数组、双指针
题目分析:
使用left指针指向下一个要放入的位置,用right向后进行遍历,遍历到满足条件的元素就覆盖到left中。
当nums的元素个数大于2时,可以通过判断前一个数是否与当前数相同来判断是否将cnt加1。在这一判断之后,若满足题意条件,即连续的牛群个数不大于3,那么就将right指向的数覆盖到left中。因为第一个数一定满足条件,right可以从第二个数开始,覆盖时left也从第二个数开始。
所用编程语言:C++
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int remove_duplicates_v3(vector<int>& nums) { // write code here int left = 0, right = 1; int cnt = 1; int size = nums.size(); if (size == 0) return 0; while (right < size) { if (nums[right] == nums[right - 1]) { if (cnt < 3) { nums[++left] = nums[right]; cnt++; } } else { nums[++left] = nums[right]; cnt = 1; } right++; } return left + 1; } };