26.删除有序数组中的重复项
一、问题描述
给定一个已排序的整数数组 nums
,你需要原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
示例:
plaintext
给定 nums = [1,1,2],
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。
你不需要考虑数组中超出新长度后面的元素。
二、方案一:双指针
1、思路
定义两个指针 slow
和 fast
。slow
初始化为 1,用于指向数组中不重复元素的开始位置。fast
初始化为 1,用于遍历数组。
使用 fast
指针遍历数组,如果 fast
指针指向的元素不等于 slow-1
指针指向的元素(即不是重复元素),则将 fast
指针指向的元素复制到 slow
指针指向的位置。
2、代码实现
go
func removeDuplicates(nums []int) int {
// 初始化两个指针,slow 和 fast
slow, fast := 1, 1
// 使用 fast 指针遍历数组,使用 slow 指针记录不重复元素的位置
for fast < len(nums) {
// 如果 fast 指针指向的元素不等于 slow-1 指针指向的元素(即不是重复元素)
if nums[fast] != nums[slow-1] {
// 将 fast 指针指向的元素复制到 slow 指针指向的位置
nums[slow] = nums[fast]
// 移动 slow 指针到下一个位置
slow++
}
// 移动 fast 指针到下一个位置
fast++
}
// 返回不重复元素的新长度
return slow
}