Этот код работает для серии чисел от 0 до N.
вая, что у вас есть массив A [1..n] размера n, он содержит элементы из набора {1..n}. Однако два элемента отсутствуют (и, возможно, два элемента массива повторяются). Найдите недостающие элементы.
Например, если n = 5, A может быть A [5] = {1,2,1,3,2}; и поэтому недостающие элементы {4,5}
Подход, который я использовал, был:
int flag[n] = {0};
int i;
for(i = 0; i < n; i++) {
flag[A[i]-1] = 1;
}
for(i = 0; i < n; i++) {
if(!flag[i]) {
printf("missing: %d", (i+1));
}
сложность пространства сводится к O (n). Я чувствую, что это очень детский и неэффективный код. Поэтому не могли бы вы предоставить лучший алгоритм с большей сложностью пространства и времени.