leetcode之26删除排序数组中的重复项Golang
遍历排序数组,如果当前遍历到的值和前一个值相等,那么就用
// 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
}
浙公网安备 33010602011771号