1、先去重后排序 O ( n 3 ) O(n^3) O(n3)
去重操作,因为数组无序,总时间复杂度为 O ( n 3 ) O(n^3) O(n3)
i from 0 to n-1
j from i + 1 to n-1
if a[j] = a[i]
then
move a[j] <- a[j + 1] , j from j + 1 to n -1
void Move(int a[], int n){
for(int i = 0; i < n; i ++){
for(int j = i + 1; j < n; j ++){
if(a[j] == a[i]){
for(int k = j + 1; j < n; j ++)
a[k-1] = a[k];
n --; //长度 - 1
}
}
}
}
2、先排序后去重 O ( n l o g n ) O(nlogn) O(nlogn)
双指针法 O ( n ) O(n) O(n)去重,总的时间复杂度取决于排序
void Move(int a[], int n){
//此时数组已经有序
int i,j;
//a[0]不用管
for(i = 1; i < n; i ++){
if(a[i] == a[i - 1]) //后一个等于前一个
continue;
a[j++] = a[i];
}
}
3、C++排序去重
sort(alls.begin(),alls.end());
alls.erase((alls.begin(),alls.end()),alls.end());