思路 1
1 先对数组排序,找出要删除数的个数。然后在从要删除的第一个位置遍历数组,将后面的数字前移。
代码:
int removeElement(int A[], int n, int elem) {
sort(A,A+n);
int count=0;
int index=0;
for(int i=0;i<n;i++){
if(A[i]==elem){
count++;
index=i;
}
}
for(int i=index-count+1;i<n-count;i++){
A[i]=A[i+count];
}
return n-count;
}
思路 2
2 再用一个下标标记新数组的下标。遍历数组如果不等于给定数。就插入。否则跳过。
代码:
int removeElement(int A[], int n, int elem) {
int index=0;
for(int i=0;i<n;i++){
if(A[i]!=elem){
A[index++]=A[i];
}
}
return index;
}
思路3
3 遍历数组遇到等于给定数的值,就与最后一个交换。这样改变了相对顺序
代码 :
int removeElement(int A[], int n, int elem) {
int index=0;
for(int i=0;i<n;i++){
if(A[i]==elem){
swap(A[i],A[n-1]);
n--;
i--;
}
}
return n;
}
当给定一个有序数组,删除其中重复的数字,只留一个。
思路 从前往后遍历,用一个新的下标。
代码:
int removeDuplicates(int A[], int n) {
int k=0;
for(int i=1;i<n;i++){
if(A[k]!=A[i]){
A[++k]=A[i];
}
}
return k+1;
}