El requisito del problema es usar un tamaño constante de complejidad espacial
Idea: establecemos un puntero de inicio, un puntero de fin,
uno desde el primero y otro desde la cola
Si el elemento señalado por start es igual a val, se intercambiará con la posición señalada por end y el final se moverá hacia adelante.
Tenga en cuenta que start no puede moverse en este momento.
Si el elemento señalado por start no es igual a val, entonces mueva el inicio hacia atrás
Cuando inicio y fin coinciden, inicio es el deseado
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
length = len(nums)
if length == 1:
return 0 if nums[0] == val else 1
start = 0
end = length - 1
#for i,value in enumerate(nums):
while start <= end:
if nums[start] == val:
nums[start],nums[end] = nums[end],nums[start]
end -= 1
else:#nums[start] != val
start += 1
return start