算法|数组|27.移除元素
Fang 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
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
2
3
4
5
6
7
8
9
10
11
12
13
# 优点
- 使用range避免了空指针异常
- k是慢指针
- k在返回之前已经自增一次了,实际上已经是非val值的总和了