遍历排序数组,如果当前遍历到的值和前一个值相等,那么就用
// i是当前遍历到数组的位置
nums = append(nums[:i], nums[i+1:]...)
使用append去掉切片中的元素,代码如下:
func removeDuplicates(nums []int) int { for i := 0; i < len(nums); { if i > 0 && nums[i] == nums[i-1] { nums = append(nums[:i], nums[i+1:]...) } else { i++ } } return len(nums) }
但是提交的时候发现用时比较长,哈哈,所以参考了题解,使用双指针的方式,如下:
双指针思路
定义快慢两个指针,初始位置分别是0,1
然后向后遍历快指针:
当快指针的值和慢指针的值相等的时候,就不做处理,继续向后遍历快指针
当快指针的值和慢指针的值不相等的时候,就将慢指针向后挪动一位,并且将快指针指向的值赋值给慢指针
重复上述过程,直到遍历完整个数组
最后返回慢指针(注意加1),就是新的去重后的数组的长度了。
代码如下:
func removeDuplicates(nums []int) int { i := 0 for j := 1; j < len(nums); j++ { if nums[i] == nums[j] { continue } i++ nums[i] = nums[j] } return i + 1 }
原文:https://www.cnblogs.com/gyyyl/p/13651208.html