思路:
1.还是数组元素置换问题,用到双指针算法
2.头尾分别放指针i和j,i一直走找到val停下,j一直走直到不是val停下,交换
3.一直走直到终止条件i>=j
4.如果i=j终止,若i=j=val,返回长度i或者j,若i=j≠val,则需要返回长度i+1
伪代码:
if nums is null or nums.length == 0
return 0
l = 0
r = nums.length - 1
while(l < r):
while(l < r and nums[l] != val):
l = l + 1
while (l < r and nums[l] == val):
r = r - 1
nums[l] <-> nums[r]
if nums[l] == val:
return l
else:
return l + 1
Python代码:
def removeElement(self, nums: List[int], val: int) -> int:
if nums is None or len(nums) == 0:
return 0
l = 0
r = len(nums) - 1
while l<r:
while(l<r and nums[l] != val):
l = l + 1
while(l < r and nums[r] == val):
r = r - 1
nums[l], nums[r] = nums[r], nums[l] # 注意python中交换元素的方法
if nums[l] == val:
return l
else:
return l + 1