Remove Duplicates from Sorted Array II
Follow up for "Remove Duplicates":
What if duplicates are allowed at most twice?
For example,
Given sorted array A = [1,1,1,2,2,3]
,
Your function should return length = 5
, and A is now [1,1,2,2,3]
.
算法思想:
数组循环前移会超时,所以利用一辅助数组B去除不需要的元素,时间复杂度度O(n),空间复杂度O(n)
class Solution {
public:
int removeDuplicates(int A[], int n) {
if(n<=2)return n;
vector<bool> B(n,false);
for(int i=1;i<n-1;i++)
if(A[i]==A[i-1]&&A[i]==A[i+1])
B[i+1]=true;
int count=0;
for(int i=0;i<n;i++)
if(!B[i])A[count++]=A[i];
return count;
}
};
answer2
时间复杂度O(n),空间复杂度O(1)
class Solution {
public:
int removeDuplicates(int A[], int n) {
if(n<=2)return n;
int index=2;
for(int i=2;i<n;++i){
if(A[i]!=A[index-2])
A[index++]=A[i];
}
return index;
}
};
answer3
时间复杂度O(n),空间复杂度O(1)
class Solution {
public:
int removeDuplicates(int A[], int n) {
if(n<=2)return n;
int index=0;
for(int i=0;i<n;i++){
if(i>0&&i<n-1&&A[i]==A[i-1]&&A[i]==A[i+1])
continue;
A[index++]=A[i];
}
return index;
}
};