高效查缺-题解

本文介绍了如何在长度为N的数组中查找缺失的编号,提供了五种不同的算法方法,包括双重循环查重、数组标记、位标记、特殊值覆盖和归位排列,最终实现时间复杂度为O(N),空间复杂度为O(1)的解决方案。同时提出了一个思考题,询问如何高效判断数组中是否存在重复元素。
摘要由CSDN通过智能技术生成

长度为N的数组中正常的编号为0–N-1,可能有重号了,也可能是编号有误,所以有可能少了一些编号。请你编写一个函数,计算所给整数数组中缺少多少个编号。
(1=<N<=999999)

定义变量sum=0,记录查缺的个数,不考虑时间复杂度和空间复杂度,这道题可以用五种方法做出来:

双重循环查重法:
先从左到右扫描数组,访问数组元素,如果数据在0~N-1之间,就重新扫描一遍数组寻找是否有其他元素与该数重复,如果出现重复sum++;如果数据不在该范围内,就sum++。最后返回sum。
代码如下:

int fun ( int d[],  int N ){
   
int flag,sum=0;            //flag作为重复标记,值为1说明有重复,为0说明没有重复
for(int i=0;i<N;i++){
   
    flag=0;
if(d[i]>=0&&d[i]<N){
   
    for(int j=0;j<N;j++){
   
    if(i!=j&&d[i]==d[j]){
   
        flag=1;
        break;
}
}
if(flag)
    sum++;
}
else
    sum++;
}
    return sum;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值