#java #arrays
Вопрос:
Я попытался ответить на вопрос с кодом литкода: Удалить дубликаты из отсортированного массива , когда ввод был 1,1,1,3,5,5,7, мой вывод был 1,3,5,7. Я все сделал правильно и был счастлив. Но из любопытства я хотел посмотреть, как выглядит полный массив теперь, когда я переместил дубликаты в конец массива. Я получил 1,3,5,7,5,5,7 Я ожидал 1,3,5,7,1,1,5
В методе удаления дубликатов
int n = nums.length;
int result = 0;
for(int i = 0; i < n; i ) {
if(i < n - 1 amp;amp; nums[i] == nums[i 1]) {
continue;
}
nums[result ] = nums[i];
}
return resu<
В основном:
int [] numbers = {1,1,1,3,5,5,7};
int res = rd.removeDuplicates(numbers);
for(int i = 0; i < numbers.length; i ) {
System.out.print(numbers[i]);
}
Почему изменились значения дубликатов?
Комментарии:
1. Окружите обе стороны символом amp;amp; в (), чтобы обеспечить правильный приоритет оператора
2. Не вижу, куда вы толкаете дубликаты до конца. Просто «остальная часть» массива остается прежней (5,5,7),
3. Вы копируете уникальные элементы в начало массива, оставляя правую часть массива нетронутой. Почему вы этого ожидаете
1,3,5,7,1,1,5
?4. Спасибо Питеру и Айвен, вы оба разумны.
5. Я предлагаю добавить
System.out.println(nums)
внутриfor
циклаremoveDuplicate
. Затем вы можете видеть изменения в массиве на каждом шаге.