算法|数组|26.删除有序数组中的重复项
Fang 2024/9/1 算法数组
# 题目
# 自解
# 思路分析
- 快指针读有序数组的值,慢指针给数组赋值
- 当快指针的值和慢指针下一个值不同时,慢指针给下一个值赋快指针的值
迷糊点:
- 不太会判断慢指针返回的值,有时候少1,有时候多1
# 代码实现
func removeDuplicates(nums []int) int {
l := len(nums)
if l == 0 {
return 0
}
f := 1
s := 0
for f < l {
if nums[s] != nums[f] {
nums[s+1] = nums[f]
s++
}
f++
}
return s+1
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 他解
# 思路分析
- 使用k作为唯一元素计数器
- 跳过首项,右比左的思路,比自解的思路好
- 同理,使用for循环避免了数组越界
- 感觉自解比较依赖于双指针,有时候单指针完全够了~
# 代码实现
func removeDuplicates(nums []int) int {
k := 1
for i := 1; i < len(nums); i++ {
if nums[i] != nums[i-1] { // nums[i] 不是重复项
nums[k] = nums[i] // 保留 nums[i]
k++
}
}
return k
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10