假设我们有一个已排序的数组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