力扣链接:https://leetcode-cn.com/probl…
解题思路:
- 题目中数组为升序数组,升序这个前提保障了雷同的元素肯定是相邻的
- 要原地删除,就不能变换位置或者借用长期空间
- 要保障元素的绝对地位不变动
在数组解题中,快慢指针是常常会用到的解法,首先应用一个慢指针指向数组的结尾,快指针指向慢指针的下一个地位,快指针开始遍历,若遇见与慢指针相等的数字,则将快指针持续遍历,直到遇到第一个不相等的数字,将该值替换慢指针的下一个地位,同时慢指针右移一位,顺次循环,最初返回数组长度时留神加 1,因为慢指针下标从 0 开始
func removeDuplicates(nums []int) int {
lower := 0
for fast := 1; fast < len(nums); fast++ {if nums[fast] == nums[lower] {continue}
nums[lower+1] = nums[fast]
lower++
}
return lower + 1
}