当前位置: 面试刷题>> 移除元素(经典算法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` 的元素的位置,从而达到原地修改数组并返回新长度的目的。在 `码小课` 网站上,你可以找到更多关于算法和数据结构的详细讲解和练习,帮助你更好地掌握这些概念。