Я пытаюсь написать программу для данного массива и значение, чтобы удалить все экземпляры этого значения на месте и вернуть новую длину.Python array slice не работает как ожидалось
Пример: Учитывая НУМС входной массив = [3,2,2,3], Val = 3
Она должна возвращать длина = 2, с двумя первыми элементами НУМС быть 2.
Вот мой код:
код 1:
def removeElement(self, nums, val):
"""
:type nums: List[int]
:type val: int
:rtype: int
"""
i = 0
j = len(nums) - 1
while i <= j:
while i <= j and nums[j] != val:
j -= 1
while i <= j and nums[i] == val:
i += 1
if i <= j:
nums[i], nums[j] = nums[j], nums[i]
return len(nums[i:])
Это возвращает срез массива в обратном порядке.
Input:
[3,2,2,3]
3
Output: [3,3]
Expected: [2,2]
Однако, если я делаю небольшие изменения в конце кода 1, это дает мне правильный вывод:
nums[:] = nums[i:]
return len(nums[i:])
Код 2:
def removeElement(self, nums, val):
"""
:type nums: List[int]
:type val: int
:rtype: int
"""
i = 0
j = len(nums) - 1
while i <= j:
while i <= j and nums[j] != val:
j -= 1
while i <= j and nums[i] == val:
i += 1
if i <= j:
nums[i], nums[j] = nums[j], nums[i]
nums[:] = nums[i:]
return len(nums)
Я не могу выяснить, почему мой код 1 не работает. Может ли кто-нибудь помочь мне понять, почему срез не работает должным образом?
Я не думаю, что любой подход работает, если у вас нет ограничений на вход, который вы не упомянули. –
Странно, что я запустил ваш код1, и он работал, как ожидалось, т. Е. С входом [3,2,2,3] возвращается [2,2] и длиной 2. – Nurjan