如果某些数字重复,我怎样才能找到C中整数数组中缺少的元素数?
假设数组为int array = {1, 2, 1, 5, 4}
,且数字最多为6
。然后,程序/函数应输出/返回2
,因为缺少2个元素(3, 6
)。
注意:0不算作缺失数字,也不能存在于数组中。
答案 0 :(得分:2)
这样吗?
int countMissing(int *x, int arrLen, int bound)
{
int * y = malloc ((bound + 1) * sizeof(int));
int i = 0;
int missing = 0;
memset(y,0,sizeof(int)*(bound+1));
for(i = 0; i<arrLen; i++)
{
if(x[i]<=bound)
{
y[x[i]] = 1;
}else
{
// error handling e.g.
return -1;
}
}
for(i = 1; i<=bound; i++)
{
if(y[i]==0) missing++;
}
free(y);
return missing;
}
用法:
int main(void)
{
int array [] = {1, 2, 1, 5, 4};
printf("%d", countMissing(array, 5, 10));
return 0;
}
输出:6。