应用题-数组专题-原地移除元素 (双指针 两种写法)

管理员
相向指针 ```python class Solution: def removeElement(self, nums: List[int], val: int) -> int: # i 从左往右遍历 找到等于target则停止 # j 从右往左遍历 找到不等于target则停止 # 交换此时 i和j的元素 i = -1 j = len( nums ) # i j 初始值主要是为了操作的统一 # 当内层while循环找到合适的ij位置时 进行交换 # 此时ij位置时交换好的值 再次进行内层while时 应当是从两者的下一个开始 while i < j: i += 1 while i < j and nums[ i ] != val: i += 1 j -= 1 while i < j and nums[ j ] == val: j -= 1 if i < j: nums[ i ], nums[ j ] = nums[ j ], nums[ i ] # 若i==j说明i,j最终停留的位置等于val 否则两者错开 return j if j == i else j + 1 ``` **上述写法改变了元素的相对位置** 接下来通过快慢指针来实现,保证元素的相对位置。 ```python class Solution: def removeElement(self, nums: List[int], val: int) -> int: slow = 0 # slow是答案区的边界 n = len( nums ) for fast in range( 0, n ): if nums[ fast ] != val: # 答案区边界变更 nums[ slow ] = nums[ fast ] slow += 1 return slow ```
评论 0

发表评论 取消回复

Shift+Enter 换行  ·  Enter 发送
还没有评论,来发表第一条吧