算法|数组|27.移除元素

2024/9/1 算法数组

# 27.移除元素

# 思路分析

快慢指针:

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

# 自解

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
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 他解

// 初始化要填入的下标 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
2
3
4
5
6
7
8
9
10
11
12
13

# 优点

  1. 使用range避免了空指针异常
  2. k是慢指针
  3. k在返回之前已经自增一次了,实际上已经是非val值的总和了
Last Updated: 2024/11/22 17:43:46