Описание заголовка: Учитывая массив чисел и значение 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 МБ