[leetcode刷题]面试经典150题之2移除元素(简单)
题目
移除元素
给你一个数组 nums
和一个值 val
,你需要 原地 移除所有数值等于 val
的元素。元素的顺序可能发生改变。然后返回 nums
中与 val
不同的元素的数量。
假设 nums
中不等于 val
的元素数量为 k
,要通过此题,您需要执行以下操作:
- 更改
nums
数组,使nums
的前k
个元素包含不等于val
的元素。nums
的其余元素和nums
的大小并不重要。 - 返回
k
。
思路分析:
- 双指针法:使用两个指针,一个指针
i
遍历整个数组,另一个指针j
用于记录不等于val
的元素的位置。每当我们遇到不等于val
的元素时,将其放到j
指针的位置,并将j
向前移动,最终j
的值就是不等于val
的元素数量。 - 原地修改:因为我们不需要额外的空间,只需要在原数组上进行操作。
步骤:
- 定义一个
j
指针,初始化为 0,用于保存不等于val
的元素。 - 遍历数组
nums
,如果当前元素不等于val
,就将它放到nums[j]
,并移动j
指针。 - 遍历完成后,
j
就是数组中不等于val
的元素个数。
代码
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
c=0
for i in range(len(nums)):
if nums[i]!=val:
nums[c]=nums[i]
c+=1
return c