当前位置: 面试刷题>> 移除元素(经典算法150题)


### 题目描述 给定一个数组 `nums` 和一个值 `val`,你需要原地移除所有数值等于 `val` 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 ### 示例 假设 `nums = [3,2,2,3]` 且 `val = 3`,函数应该返回新的长度 `2`,并且 `nums` 的前两个元素被修改为 `2`,即 `[2, 2, _, _]`。这里 `_` 表示该位置的值不重要。 ### PHP 示例代码 ```php function removeElement(&$nums, $val) { $length = count($nums); $index = 0; for ($i = 0; $i < $length; $i++) { if ($nums[$i] != $val) { $nums[$index] = $nums[$i]; $index++; } } return $index; } // 示例用法 $nums = [3, 2, 2, 3]; $val = 3; $newLength = removeElement($nums, $val); echo "新长度为: " . $newLength . PHP_EOL; print_r($nums); ``` ### Python 示例代码 ```python def removeElement(nums, val): index = 0 for num in nums: if num != val: nums[index] = num index += 1 return index # 示例用法 nums = [3, 2, 2, 3] val = 3 new_length = removeElement(nums, val) print("新长度为:", new_length) print(nums[:new_length]) ``` ### JavaScript 示例代码 ```javascript function removeElement(nums, val) { let index = 0; for (let i = 0; i < nums.length; i++) { if (nums[i] !== val) { nums[index] = nums[i]; index++; } } return index; } // 示例用法 let nums = [3, 2, 2, 3]; let val = 3; let newLength = removeElement(nums, val); console.log("新长度为:", newLength); console.log(nums.slice(0, newLength)); ``` 以上代码均实现了题目要求,通过遍历数组并使用一个索引 `index` 来记录不等于 `val` 的元素的位置,从而达到原地修改数组并返回新长度的目的。在 `码小课` 网站上,你可以找到更多关于算法和数据结构的详细讲解和练习,帮助你更好地掌握这些概念。
推荐面试题