给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
要求空间复杂度O(1)。
思路:遍历数组元素,并判断其前后元素的是否相等,相等即重复。注意数组第一个和最后一个元素的边界问题。该算法的时间复杂度为O(n)。空间复杂度为O(1)。
func delRepeatElem(nums []int) int {
for i := 1; i < len(nums)-1; i++ {
fmt.Printf("i:%d; len(nums):%d\n", i, len(nums))
if nums[i] == nums[i+1] || nums[i] == nums[i-1] {
nums = append(nums[:i], nums[i+1:]...) //删除重复元素
i--
}
fmt.Println("nums", nums)
}
return len(nums)
}
代码亲测,请放心食用:
package main
import "fmt"
func main() {
num1 := []int{1, 2, 2, 3, 3,