C 查找未排序整数数组中缺失元素的计数
如果有些数字是重复的,我怎么才能从C中的整数数组中找到缺少多少元素呢 假设数组是C 查找未排序整数数组中缺失元素的计数,c,arrays,algorithm,performance,C,Arrays,Algorithm,Performance,如果有些数字是重复的,我怎么才能从C中的整数数组中找到缺少多少元素呢 假设数组是intarray={1,2,1,5,4},并且应该有多达6的数字。然后,程序/函数应输出/返回2,因为缺少2个元素(3,6) 注意:0不算作丢失的数字,也不能出现在数组中。这样做吗 int countMissing(int *x, int arrLen, int bound) { int * y = malloc ((bound + 1) * sizeof(int)); int i = 0; int m
intarray={1,2,1,5,4}
,并且应该有多达6的数字。然后,程序/函数应输出/返回2
,因为缺少2个元素(3,6
)
注意:0不算作丢失的数字,也不能出现在数组中。这样做吗
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;
}
输出:6。你是说长度为n
的数组可以有介于1
到n+1
之间的数字吗?@YoungHobbit不,数组元素可能是相同的,但例如,可能缺少最多10个数字。因此,将有6个元素缺失。序列的最大数目(问题中的6个)可以是任何数字。(但它显然是预先指定的)Nits:(1)您应该分配char*y
以节省一些空间;(2) 您应该使用y[x[i]-1]
或分配一个大小为bound+1
的数组,因为否则您有一个越界访问;(3) 你应该释放你的数组。@nneonneo:fixing,我没有带调试器;现在应该可以用了为什么你用memset()
而不是calloc()
?@Mitsos101:这是一种风格thing@Giorgi不过,内存是否需要归零?
int main(void)
{
int array [] = {1, 2, 1, 5, 4};
printf("%d", countMissing(array, 5, 10));
return 0;
}