题目
自解
思路分析
思路不太好,最终也没有实现
- 慢指针赋值 快指针遍历 for循环足够了
- 快指针从 1 开始,判断慢指针和快指针中间有多少个不同的值
- 当值等于1,慢指针移动添加一个不同值;当值大于等于1,慢指针移动两次,添加两个不同值
代码实现
go
// 无 2024.9.3 水平有限~
他解
思路分析
- 当数组小于2,直接返回数组的长度
- 设置快慢指针s、f
- 因为数组是有序递增的,当nums[s-2]的值和nums[f]的值相等时,不需要这个值,因为nums数组s-2到l这之间的数值都相等,f自增
- 当nums[s-2]的值和nums[f]的值不相等时,这时候从nums[s]填充nums[f],s和f自增
代码实现
go
func removeDuplicates(nums []int) int {
l := len(nums)
if l < 2 {
return l
}
s, f := 2, 2
for f < l {
if nums[s-2] != nums[f] {
nums[s] = nums[f]
s++
}
f++
}
return s
}