题目描述
给定一个数组 nums
和一个值 val
,你需要原地移除所有数值等于 val
的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
示例
假设 nums = [3,2,2,3]
且 val = 3
,函数应该返回新的长度 2
,并且 nums
的前两个元素被修改为 2
,即 [2, 2, _, _]
。这里 _
表示该位置的值不重要。
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 示例代码
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 示例代码
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
的元素的位置,从而达到原地修改数组并返回新长度的目的。在 码小课
网站上,你可以找到更多关于算法和数据结构的详细讲解和练习,帮助你更好地掌握这些概念。