Рубрики
Uncategorized

Ежедневный вопрос 3 по Leetcode: удаление элементов

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

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

Пример 1: Учитывая nums = [3,2,2,3],, Функция должна возвращать новую длину 2, и первые два элемента в nums равны 2. Вам не нужно думать об элементах в массиве, которые следуют за новой длиной.

Пример 2: Учитывая nums = [0,1,2,2,3,0,4,2],, Функция должна возвращать новую длину 5, и первые пять элементов в nums являются 0, 1, 3, 0, 4. Обратите внимание, что пять элементов могут располагаться в любом порядке. Вам не нужно думать об элементах массива, которые следуют за новой длиной.

Объясните: Почему возвращаемое значение является целым числом, а выходной ответ-массивом? Обратите внимание, что входной массив передается по ссылке, что означает, что изменение входного массива в функции видно вызывающему. Вы можете представить внутреннюю операцию следующим образом: //Nums передается по ссылке. То есть не делайте никаких копий аргументов int(nums, val); //Изменение входного массива в функции видно вызывающему. //В зависимости от длины, возвращаемой вашей функцией, она выводит все элементы массива в пределах этого диапазона длин. для (int; i < len; i++) { печать(nums[i]); }

Источник: Ссылка на литкод: https://leetcode-cn.com/probl

Способ 1:

class Solution {

    /**
     * @param Integer[] $nums
     * @param Integer $val
     * @return Integer
     */
    function removeElement(&$nums, $val) {
        $count = count($nums);
        for($i=$count-1; $i>=0; $i--){
            if($nums[$i] == $val){
                unset($nums[$i]);
            }
        }
        return count($nums);
    }
}

Время выполнения: 8 мс, потребление памяти: 14,8 МБ

Способ второй:

class Solution {

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

Время выполнения: 8 мс, потребление памяти: 14,9 МБ