#arrays #c
Вопрос:
Мне дается массив случайно сгенерированных значений, и я должен удалить дубликаты, сдвинув их вниз и заменив повторяющееся значение на 0 в конце массива. Как только я нахожу дубликат индекса, я начинаю оттуда и сдвигаю элементы массива вниз, однако это приводит к пропуску этого первого индекса. Я также не уверен, как включить «соответствующий» индекс.
int k, i = 0, j;
while (i < size){
j= i 1;
while (j < size){
if (array[i] == array[j]) {
for (k = j; k < size-1; k ) {
array[k] = array[k 1];
}
array[k] = 0;
}
j;
}
i;
}
Комментарии:
1. Альтернативный подход к алгоритму заключается в выполнении
memmove
операции над оставшейся частью массива, а затем в установке последнего элемента в 0.
Ответ №1:
Не увеличивайте j
, когда найдете совпадение, чтобы вы могли проверить его снова после переключения.
int k, i = 0, j;
for (i = 0; i < size; i ) {
j= i 1;
while (j < size){
if (array[i] == array[j]) {
for (k = j; k < size-1; k ) {
array[k] = array[k 1];
}
array[k] = 0;
} else {
j;
}
}
}