📅  最后修改于: 2023-12-03 14:58:36.431000             🧑  作者: Mango
这是一道经典的编程题目,也是编程基础知识的考察题目之一。
给定一个数组 nums 和一个值 val,需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的空间,你必须在原地修改输入数组并使用 O(1) 额外空间的条件下完成。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
输入数组 nums 和一个值 val。其中,nums 是长度为 n 的数组,0 ≤ n ≤ 10^4,值的范围是 -10^4 ≤ nums[i] ≤ 10^4;val 的取值范围是 -10^5 ≤ val ≤ 10^5。
返回移除完所有等于 val 的元素后的新长度。
输入:
nums = [3, 2, 2, 3]
val = 3
输出:
2
解释:
函数应该返回新的长度 2,nums 数组中前两个元素为 2。
该问题可以使用双指针来解决。左指针指向当前处理过的不包括 val 的数组的最后一个元素,右指针用于扫描数组。
具体步骤如下:
def removeElement(nums, val):
index = 0
for i in range(len(nums)):
if nums[i] != val:
nums[index] = nums[i]
index += 1
return index
该算法需要对数组进行一次遍历,因此时间复杂度为 O(n),其中 n 是数组的长度。
该算法只需要使用两个变量(即 index 和 i)作为指针,因此空间复杂度为 O(1)。