在未排序的整数数组中查找缺少元素的计数

时间:2015-11-01 01:13:43

标签: c arrays algorithm performance

如果某些数字重复,我怎样才能找到C中整数数组中缺少的元素数?

假设数组为int array = {1, 2, 1, 5, 4},且数字最多为6。然后,程序/函数应输出/返回2,因为缺少2个元素(3, 6)。

注意:0不算作缺失数字,也不能存在于数组中。

1 个答案:

答案 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。