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