法一:暴力解法
解题思路:
1.假设可以使用额外空间
2.出现不同的元素就复制到新数组里
时间复杂度:O(n)
空间复杂度:O(n)
法二:双指针
解题思路:
1.声明一个指向留在数组里的数字的慢指针,和一个可以移动的快指针
2.比较nums[low]和nums[fast]的值是否相等
相等:low指针不动,让fast指针迭代循环(往后偏移)
不相等:把nums[fast]的值覆盖到low指针的下一个位置nums[low+1], 之后low指针偏移到下一位
直到for循环结束,返回数组元素个数即low+1
func main{
var nums []int
nums=[]int{1,2,2,4,4,5,6,7,8,9,9}
ans:=removeDuplicates(nums)
fmt.Println(ans)
}
func removeDuplicates(nums []int) int{
n:=len(nums)
if n==0{
return 0
}
slow:=0
for fast:=1;fast<n;fast++{
if nums[slow]!=nums[fast]{
nums[slow+1]=nums[fast]
slow++
}
}
return slow+1
}
时间复杂度:O(n)
空间复杂度:O(1)