删除数组中的重复元素(c语言)

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

比如对于数组[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<stdio.h>
#include<stdlib.h>
int 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;

}

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值