Рубрики
Uncategorized

Закодируйте один вопрос в день (2): удалите дубликаты в массиве сортировки

Автор оригинала: David Wong.

Заглавие:

Учитывая сортировку массива, вам нужно удалить повторяющиеся элементы на месте, чтобы каждый элемент появлялся только один раз, и вернуть новую длину массива после удаления. Не используйте дополнительное пространство массива, вы должны изменить входной массив на месте и сделать это с O (1) дополнительным пространством.

Пример:

Учитывая числовые значения массива = [1,1,2], функция должна возвращать новую длину 2, а первые два элемента исходного массива nums изменяются на 1,2.

Ход мыслей:

Следующий элемент массива сравнивается с текущим элементом. Если он не равен, он непосредственно присваивается следующему элементу текущего элемента, так что выполняется только один цикл.

class Solution {

    /**
     * @param Integer[] $nums
     * @return Integer
     */
    function removeDuplicates(&$nums) {
        $count = count($nums);
        $i = 0;
        for($j=1; $j<$count; $j++){
            if($nums[$j] != $nums[$i]){
                $nums[++$i] = $nums[$j];
            }
        }
        return $i+1;
    }
}

Время выполнения 24 МС, потребление памяти 16,8 мегабайт

Оригинал: “https://developpaper.com/leetcode-one-question-a-day-2-delete-duplicates-in-sorting-array/”