思路:双指针
fast指针指向当前位置,slow指针指向新数组的新元素的位置,新数组就是没有val的数组
1)当fast指向的数值不等于val,则这个值一定是新数组的元素,将fast指向的数复制到slow的位置,接着,fast、slow同时右移1位
2)当fast指向的数值等于val,则这个值不在新数组中,slow保持不变,fast继续右移1位
最后,区间[0,slow)中的元素不包含val,此时slow就是新数组的长度。
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
#快慢双指针
n=len(nums)
slow=0
for fast in range(n):
#当fast的值不等于val,将其赋给slow,并让slow前进1步
#当fast的值等于val,slow不动,fast继续前进
if nums[fast]!=val:
nums[slow]=nums[fast]
slow+=1
return slow