移除數組中所有等於 val 的元素,返回新長度。順序可變,超出新長度部分忽略。
例:[1,2,3,4,3,2,1], val=1 → 長度 5
left 找等於 val 的位置right 找不等於 val 的位置left++, right--left > rightclass Solution:
def removeElement(self, nums: List[int], val: int) -> int:
left, right = 0, len(nums) - 1
while left <= right:
while left <= right and nums[left] != val:
left += 1
while left <= right and nums[right] == val:
right -= 1
if left < right:
nums[left] = nums[right]
left += 1
right -= 1
return right + 1
def removeElement(self, nums, val):
slow = 0
for fast in range(len(nums)):
if nums[fast] != val:
nums[slow] = nums[fast]
slow += 1
return slow
單指針法(快慢指針)更直觀:slow 指向下一個放置非 val 元素的位置,fast 掃描全數組。雙指針法交換次數少,適合「移除元素代價大」的場景。