题目描述:
- 思路一:按照上一题的思路,从后面遍历,依次判断是否等于val:
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
if nums==[]:
return 0
for i in range(len(nums)-1,-1,-1):
if val==nums[i]:
del nums[i]
return len(nums)
- 思路二:双指针,设置头指针和尾指针,分别向前和向后移动,只需将头指针等于val和尾指针不等于val的元素调换位置。
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
if nums==[]:
return 0
head,tail=0,len(nums)-1
while head<tail:
if nums[head]==val:
if nums[tail]!=val:
t=nums[head]
nums[head]=nums[tail]
nums[tail]=t
else:
tail-=1
else:
head+=1
res=0
for i in range(len(nums)):
if nums[i]==val:
return res
res+=1
- 思路三:依次把不等于val的元素移动到数组头部:
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
idx = 0
for i in range(len(nums)):
if nums[i] != val:
nums[idx],nums[i] = nums[i],nums[idx]
idx += 1
return idx