Учитывая список чисел и значение, удалите все вхождения этого значения из списка чисел на месте и верните количество оставшихся элементов. например nums = [0,1,2,2,3,0,4,2], val = 2 должны возвращать 5 с числами как [0,1,4,0,3,_,_,_].

  1. Для начала создадим два указателя — один в начале и один в конце:
def removeElement(nums, val):
    i = 0
    j = len(nums) - 1

2. Далее мы будем перебирать числа, пока указатели не перекрываются:

def removeElement(nums, val):
    i = 0
    j = len(nums) - 1
    while i <= j:
        # do shit...

3. Если текущий num равен val, мы можем «избавиться от него», заменив его конечным элементом и уменьшив наш конечный указатель на единицу:

def removeElement(nums, val):
    i = 0
    j = len(nums) - 1
    while i <= j:
        if nums[i] == val:
            nums[i], nums[j] = nums[j], nums[i]
            j -= 1

4. В противном случае мы знаем, что текущее число чистое, и мы увеличиваем начальный указатель, чтобы пройти мимо него:

def removeElement(nums, val):
    i = 0
    j = len(nums) - 1
    while i <= j:
        if nums[i] == val:
            nums[i], nums[j] = nums[j], nums[i]
            j -= 1
        else:
            i += 1

5. Наконец, верните общее количество:

def removeElement(nums, val):
    i = 0
    j = len(nums) - 1
    while i <= j:
        if nums[i] == val:
            nums[i], nums[j] = nums[j], nums[i]
            j -= 1
        else:
            i += 1
    return i

…и готово 🎉!