力扣链接:https://leetcode-cn.com/probl...
解题思路

  1. 题目中数组为升序数组,升序这个前提保证了相同的元素一定是相邻的
  2. 要原地删除,就不能变换位置或者借用临时空间
  3. 要保证元素的相对位置不变化
    在数组解题中,快慢指针是经常会用到的解法,首先使用一个慢指针指向数组的开头,快指针指向慢指针的下一个位置,快指针开始遍历,若遇见与慢指针相等的数字,则将快指针继续遍历,直到遇到第一个不相等的数字,将该值替换慢指针的下一个位置,同时慢指针右移一位,依次循环,最后返回数组长度时注意加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
}

LabRat
1 声望1 粉丝