判断数组中是否有重复整数的方法:
#include "stdio.h" #define MAX 200//就是允许整数数组中的最大数组 #define Len 10 //有一个整型数组,判断里面是否有重复数据,要求O(n)的算法 int main() { int arr[Len] = {123,10,3,5,199,77,99,8,5,10}; int flag[MAX] = {0}; for (int i=0;i<Len;i++) { if (flag[arr[i]] == 1) { printf("有重复数字/n"); break; } else flag[arr[i]] =1; } return 0; } 1.缺点:MAX比较大时就不合适了,比如如果数组中有一个整数是326489,那么必须至少宏定义MAX的值为为326489+1 摘要别人的思路如下: 假如是下面的方法判断是否有重复 int a[MAX] = {0}; unsigned int x; for(int i=0;i <n;i++) { //读入x if(a[x]==1) { //x重复出现了 } else { a[x]=1; } } 那么,MAX比较大时就不合适了 但是可以把“用int数组记录是否重复”改为“用每一个bit记录是否重复”,于是变成: int a[MAX] = {0}; unsigned int x; const int iBitCount = 32; for(int i=0;i <n;i++) { //读入x if(a[x/iBitCount]& (1 < <(x%iBitCount))!=0) { //x重复出现了 } else { a[x/iBitCount] ¦= (1 < <(x%iBitCount)); } } |
判断一个整数数组中是否有重复数字出现的O(n)时间复杂度算法
最新推荐文章于 2021-10-17 19:13:00 发布