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;
}
};
本文探讨了如何在已排序的数组中移除多余的重复元素,使得每个元素最多只出现两次。通过三种不同的实现方式,展示了如何在保证时间效率的同时达到所需效果。
708

被折叠的 条评论
为什么被折叠?



