本文只是自己学习过程的一个记录,可能有不对的地方,欢迎批评指正
算法实现前提:
算法思想 如上图,是一个数组图示:
- left、right初始化位置分别为:0、1;
- 比较left、right指向位置的值,若相等,则left不动,right右移;
- 若left、right指向位置的值不等,则left向右移,并且将此时right指向位置的值赋给left指向位置,right再向右移;
- 直至right指向数组的最后一个位置为止。
以下是实现源码:
#include <stdio.h>
int Delete_duplicate(int *num,int len);
int num[] = {1,1,2,3,3,3,5,7};
int num_len;
int main(void){
num_len = Delete_duplicate(num,sizeof(num)/sizeof(num[0]));
printf("num_len:%d\n",num_len);
return 0;
}
int Delete_duplicate(int *num,int len){
int left = 0;
int right = 1;
if (num == NULL || len == 0)
return 0;
for(right = 1; right < len; right++) {
if(num[left] != num[right]){
num[++left] = num[right];
}
}
return ++left;
}
|