数组双指针

1. 双指针

双指针应用时,需要创建虚拟节点,这样可以避免第一个元素进行特殊处理。

思路:快指针正常向前,慢指针在某些情况下向前。

例如:leetcode 27, 删除数组中等于val元素,返回数组长度,

Input: nums = [3,2,2,3], val = 3
Output: 2, nums = [2,2,_,_]
class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        pre = -1
        next = 0
        dup = 0
        while next < len(nums):
            if nums[next] == val:
                dup += 1
            else:
                nums[pre + 1] = nums[next]
                pre += 1
            next += 1
        return len(nums) - dup

你可能感兴趣的:(数据结构,数据结构)