- 題目鏈接:https://leetcode.com/problems/remove-element/solution/
- 題目概述:這道題讓我們在一個數(shù)組里刪除指定的元素,并返回刪除元素后的數(shù)組長度n,并且數(shù)組前n個長度不包含指定刪除的元素
- 題目要求:
- 原地操作
- 不分配額外空間
- 不關(guān)心返回的數(shù)組元素順序
- 解法
class Solution(object):
def removeElement(self, nums, val):
"""
:type nums: List[int]
:type val: int
:rtype: int
"""
n = len(nums)
if n == 1 and nums[0] == val:
return 0
p = n-1
q = p+1
while p >= 0 and q >= 0:
while p >= 0 and nums[p] == val:
p -= 1
q = p - 1 if q >= p else q - 1
while q >= 0 and nums[q] != val:
q -= 1
if q >= 0:
nums[p] ^= nums[q]
nums[q] ^= nums[p]
nums[p] ^= nums[q]
return p+1
描述:使用雙指針法,因為最后要返回數(shù)組長度,所以思路是將后面的非指定元素交換到前面指定元素的位置
- p從尾部向頭部移動,遇到指定元素即停止
- q從p前面開始向頭部移動,遇到非指定元素即停止
- 原地交換p、q指向的元素