В этой задаче LeetCode нам предоставляется массив чисел и предлагается удалить все дубликаты, не создавая новый массив. Другими словами, с исходным массивом нужно работать на месте, а не просто перемещать уникальные значения в новый массив и возвращать его.

Решение №1: Цикл

Более или менее все решения этой проблемы вращаются вокруг одной и той же базовой концепции: вы перебираете массив, перемещаете все уникальные числа вперед, а затем отсекаете хвост. Итак, что мы будем делать здесь:

На протяжении всего цикла мы поддерживаем «уникальный курсор». Этот курсор отслеживает, сколько уникальных значений было найдено, и, таким образом, позволяет нам узнать, где разместить следующее уникальное значение в исходном массиве.

Вы заметите, что конец этого решения немного странный, и это из-за того, как LeetCode оценивает отправленные материалы. Они не наказывают вас за то, что вы не отрубили хвост, поэтому я закомментировал это, чтобы повысить производительность. Кроме того, вместо того, чтобы возвращать измененный массив, по какой-то причине возвращаемое значение должно быть количеством уникальных элементов, поэтому мы возвращаем его здесь.