0027. 移除元素

0027. 移除元素 #

  • 标签:数组、双指针
  • 难度:简单

题目大意 #

给定一个数组 nums,和一个值 val。不使用额外数组空间,将数组中所有数值等于 val 值的元素移除掉,并且返回新数组的长度。

解题思路 #

使用两个指针 left,right。left 指向处理好的非 val 值元素数组的尾部,right 指针指向当前待处理元素。

不断向右移动 right 指针,每次移动到非 val 值的元素,则将左右指针对应的数交换,交换同时将 left 右移。

这样就将非 val 值的元素进行前移,left 指针左边均为处理好的非 val 值元素,而从 left 指针指向的位置开始, right 指针左边都为 val 值。

遍历结束之后,则所有 val 值元素都移动到了右侧,且保持了非零数的相对位置。此时 left 就是新数组的长度。

代码 #

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        left = 0
        right = 0
        while right < len(nums):
            if nums[right] != val:
                nums[left], nums[right] = nums[right], nums[left]
                left += 1
            right += 1
        return left
本站总访问量  次  |  您是本站第  位访问者