题目:
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
代码:
func removeDuplicates(nums
[]int) int {
if len(nums
) == 0 {
return 0
}
i
:= 0
for j
:= 1; j
< len(nums
); j
++ {
if nums
[i
] != nums
[j
] {
i
++
nums
[i
] = nums
[j
]
}
}
return i
+ 1
}
思路:
双指针,i 是遍历数组的指针,j 是 i 后一位的指针,当 nums[i] 和 num[j] 不相等时指针 i 前进一位,并且把 j 的值赋给 i ,优点是当两个位置值相同时,只是让 i 指针加了一,在下次比较后会将重复的值替换为不重复的值,符合题目要求的原地修改,最终 i+1 即为不重复的数组长度