题目描述,对于给定的按照顺序排序的数组,删除其中重复的元素,并返回删除重复元素后的数组长度。

比如对于数组[1,1,1,2,2,2,3,3,3,4,4]删除重复元素后的长度为4

解体思路:设置双下标i、j,j初始化在i后面,当a[i]=a[j]时j++,一直到不相等的时候,将a[j]的值赋值给a[i+1],当j>=length的时候结束。

#include#includeint main(void){int MAX = 10;//定义数组初始最大长度int num,count = 0 ; //输入的数字,输入数字的计数int *nums = (int*)malloc(MAX*sizeof(int));int length = MAX; //数组初始长度(这里没有描述好,应该是最大可容纳长度)int recount = 0; //记录去重后的数组有效长度printf("请输入数组元素,输入-1表示结束(按照从小到大输入):");int i = 0;//进行输入while(1){//建立数组scanf("%d",&num);if(num==-1){break;}count++;if(i<length){nums[i] = num;}else{length += MAX; nums = (int*)realloc(nums,length*sizeof(int));nums[i] = num;}i++;}printf("数组长度为:%d\n",count);for(int i=0;i<count;i++){printf("%d ",nums[i]);}printf("\n");//开始去掉重复的元素,count是输入的数组长度//定义新的数组长度int new_length = 0;//之所以1也要在这里进行判断,是因为如果进行下面的算法,如果j=1会出现数组越界if(count==0||count==1){new_length = count;}else{i = 0;for(int j=1;j<count;j++){if(nums[i]!=nums[j]){nums[++i]=nums[j];}}new_length = i+1;}printf("去重后的数组长度为%d,数组元素为:\n",new_length);for(int i=0;i<new_length;i++){printf("%d ",nums[i]);}printf("\n");return 0;}

如有问题请各位大佬批评指出~