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


题目描述

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

推荐面试题