```
int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize) {
int* histogram = (int*) malloc(sizeof(int) * (numsSize + 1));
memset(histogram, 0, sizeof(int) * numsSize);
for (int index = 0; index < numsSize; index++) {
histogram[nums[index]]++;
}
histogram[0] = 1;
for (int index = 1; index <= numsSize; index++) {
if (histogram[index] == 0) {
histogram[histogram[0]] = index;
histogram[0]++;
}
}
*returnSize = histogram[0] - 1;
return &histogram[1];
}
```

Keeping a histogram array, and later traversing the histogram to return elements with 0 values allows us to solve this problem with O(n) complexity. Index 0 of the histogram was used to store the number of missing numbers.