从C ++中的Sorted Array II中删除重复项

假设我们有一个已排序的数组num,我们必须就地删除重复项,以便重复项元素最多出现两次并返回新的长度。要完成此任务,我们不能占用额外的空间。我们必须用O(1)的空间来解决这个问题。例如,如果数组类似于[0,0,0,1,1,1,1,2,3,3],则输出将为[0,0,1,1,2,3,3] ,它的长度是7

让我们看看步骤-

  • len:= 2和n:=数组大小

  • 如果n <= 2,则返回n

  • 对于我:= 2到n

    • nums [len]:= nums [i],并将len加1

    • 如果nums [i]!= nums [len-2]或nums [i]!= nums [len-1]

    • 返回len

    让我们看下面的实现以更好地理解-

    示例

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
       public:
       int removeDuplicates(vector<int>& nums) {
          int len = 2;
          int n = nums.size();
          if(n <= 2)return n;
          for(int i = 2; i < n; i++){
             if( nums[i] != nums[len - 2] || nums[i] != nums[len - 1]){
                nums[len] = nums[i];
                len++;
             }
          }
          return len;
       }
    };
    main(){
       Solution ob;
       vector<int> v = {0,0,0,1,1,1,1,2,3,3};
       cout << ob.removeDuplicates(v);
    }

    输入值

    [0,0,0,1,1,1,1,2,3,3]

    输出结果

    7