Учитывая список чисел и значение, удалите все вхождения этого значения из списка чисел на месте и верните количество оставшихся элементов. например nums = [0,1,2,2,3,0,4,2]
, val = 2
должны возвращать 5
с числами как [0,1,4,0,3,_,_,_]
.
- Для начала создадим два указателя — один в начале и один в конце:
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
…и готово 🎉!