Так как N действительно мало, вы можете использовать F [i] = k, если число i появляется k раз.
int F[10]; // make sure to initialize it to 0
for ( int i = 0; i < N; ++i )
++F[ numbers[i] ];
Теперь, чтобы заменить дубликаты, обойдите массив чисел, и если текущее число появляется более одного раза, уменьшите его счетчик и замените его на число, которое появляется в 0 раз, и увеличьте счет этого числа. Вы можете оставить это O (N), если сохраните список чисел, которые вообще не появляются. Я дам вам понять, что именно нужно сделать, так как это звучит как домашнее задание.