80. 删除有序数组中的重复项 II

85 阅读1分钟

80. 删除有序数组中的重复项 II

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

思路:快慢指针

直接在原数组上更改

slow代表新数组的末位

fast代表旧数组末位

判断旧数组元素能否加入新数组

func removeDuplicates(nums []int) int {
    if len(nums) <= 2{
        return len(nums)
    }
	slow, fast := 2, 2
	// 分别代表两个数组,slow是新数组末位,fast是旧数组
	// 判断旧数组能否加入新数组中
	for n := len(nums); fast < n; fast++ {
		if nums[slow-2] != nums[fast] {
			nums[slow] = nums[fast]
			slow++
		}
	}
	return slow
}