公告

微信

欢迎大家私信交流

Skip to content

27.移除元素

思路分析

快慢指针:

  • 快指针匹配条件
  • 慢指针填充数据

自解

go
func removeElement(nums []int, val int) int {
    f := 0
    s := 0

    for {
        // 快指针超出数组长度,终止循环
        if f > len(nums)-1 {
            break
        }

        // 快指针值不等于val,慢指针值等于快指针值
        // 快指针值等于val,忽略数组的值
        if nums[f] != val {
            nums[s] = nums[f]
            s++
        }
        f++
    }

    return s
}

他解

go
// 初始化要填入的下标 k=0。
// 从左到右遍历 nums,如果 nums[i]=val,则更新 nums[k]=nums[i],然后把 k 加一。
// 遍历结束,返回 k。
func removeElement(nums []int, val int) int {
    k := 0
    for _, x := range nums {
        if x != val {
            nums[k] = x
            k++
        }
    }
    return k
}

优点

  1. 使用range避免了空指针异常
  2. k是慢指针
  3. k在返回之前已经自增一次了,实际上已经是非val值的总和了

上次更新于: